Laden...

Forenbeiträge von Kriz Ingesamt 141 Beiträge

18.11.2021 - 22:15 Uhr

Hey, mega Dank, für diese kompetente Antwort! Wo genau steht denn in meiner Frage, dass ich das gerne abgenommen haben möchte?

Ja, die Dokumentation habe ich schon gelesen, es wird viel und ausführlich über das Posten an sich geschrieben, aber das Thema Formatieren wird bis auf Workplaces nicht behandelt.

18.11.2021 - 22:05 Uhr

Servus,

wenn man in Facebook Beiträge erstellt, kann man die immer recht hübsch formatieren, ist dies auch über die API möglich?
Also das Posten funktioniert, mir gehts um die Formatierung.

Danke schonmal!

03.11.2021 - 10:24 Uhr

Alles klar, danke für die Hilfe!

03.11.2021 - 09:43 Uhr

Ja, geht über https

03.11.2021 - 08:50 Uhr

Servus,

folgender Sachverhalt:
Ich habe eine API, an die ich per HttpPost im Body eine Ausweisnummer und einen PIN schicke. Auf der API wird dann geschaut, ob Ausweisnummer und PIN zusammen passen und eine dem entsprechende Antwort geschickt.

Aktuell ver- und entschlüssele ich die Daten mittels CodeSnippets von Stackoverflow:


static internal class Crypto
    {
        static string pw = "1234";
        // Define the secret salt value for encrypting data
        private static readonly byte[] salt = Encoding.ASCII.GetBytes("Das Salz in der Suppe");

        internal static string Encrypt(string textToEncrypt)
        {
            var algorithm = GetAlgorithm(pw);

            //Anything to process?
            if (textToEncrypt == null || textToEncrypt == "") return "";

            byte[] encryptedBytes;
            using (ICryptoTransform encryptor = algorithm.CreateEncryptor(algorithm.Key, algorithm.IV))
            {
                byte[] bytesToEncrypt = Encoding.UTF8.GetBytes(textToEncrypt);
                encryptedBytes = InMemoryCrypt(bytesToEncrypt, encryptor);
            }
            return Convert.ToBase64String(encryptedBytes);
        }

        /// <summary>
        /// Takes the given encrypted text string and decrypts it using the given password
        /// </summary>
        /// <param name="encryptedText">Encrypted text.</param>
        /// <param name="encryptionPassword">Encryption password.</param>
        internal static string Decrypt(string encryptedText, string encryptionPassword)
        {
            var algorithm = GetAlgorithm(encryptionPassword);

            //Anything to process?
            if (encryptedText == null || encryptedText == "") return "";

            byte[] descryptedBytes;
            using (ICryptoTransform decryptor = algorithm.CreateDecryptor(algorithm.Key, algorithm.IV))
            {
                byte[] encryptedBytes = Convert.FromBase64String(encryptedText);
                descryptedBytes = InMemoryCrypt(encryptedBytes, decryptor);
            }
            return Encoding.UTF8.GetString(descryptedBytes);
        }

        /// <summary>
        /// Performs an in-memory encrypt/decrypt transformation on a byte array.
        /// </summary>
        /// <returns>The memory crypt.</returns>
        /// <param name="data">Data.</param>
        /// <param name="transform">Transform.</param>
        private static byte[] InMemoryCrypt(byte[] data, ICryptoTransform transform)
        {
            MemoryStream memory = new MemoryStream();
            using (Stream stream = new CryptoStream(memory, transform, CryptoStreamMode.Write))
            {
                stream.Write(data, 0, data.Length);
            }
            return memory.ToArray();
        }

        /// <summary>
        /// Defines a RijndaelManaged algorithm and sets its key and Initialization Vector (IV) 
        /// values based on the encryptionPassword received.
        /// </summary>
        /// <returns>The algorithm.</returns>
        /// <param name="encryptionPassword">Encryption password.</param>
        private static RijndaelManaged GetAlgorithm(string encryptionPassword)
        {
            // Create an encryption key from the encryptionPassword and salt.
            var key = new Rfc2898DeriveBytes(encryptionPassword, salt);

            // Declare that we are going to use the Rijndael algorithm with the key that we've just got.
            var algorithm = new RijndaelManaged();
            int bytesForKey = algorithm.KeySize / 8;
            int bytesForIV = algorithm.BlockSize / 8;
            algorithm.Key = key.GetBytes(bytesForKey);
            algorithm.IV = key.GetBytes(bytesForIV);
            return algorithm;
        }

    }

Nun ist es so, dass dieser API-Endpunkt auch für andere Nutzer zugänglich gemacht werden soll.
Nun wird ja nicht jeder mit C# arbeiten, wie komme ich nun mit den zukünftigen Nutzern auf einen Nenner, was die Verschlüsselung angeht?

Ich bin im Thema Verschlüsselung noch ein absoluter Anfänger, daher habt Nachsicht, falls es eine Anfängerfrage ist.

Danke im Vorraus!
Kriz

03.11.2021 - 05:50 Uhr

Alles klar, danke!

02.11.2021 - 10:07 Uhr

Moin zusammen,

folgender Sachverhalt:
Ich habe eine App, in der Nutzer Artikel anlegen können mit einem Bild.
Aktuell wird das Bild per FTP an den Server übertragen, wo es dann andere Nutzer wiederum importieren können.

Im Zuge eines neuen Datenbankaufbaus hatte ich den Gedankengang, ob ich statt dessen nicht die Bilder als ByteArray in einer Datenbank speichern könnte. Die Bildgröße ist im Schnitt 300kb, aktuell sind es ca 1400 Bilder, es können (das hoffe ich) aber auch irgendwann mal Millionen sein.

Welche Vor-, Nachteile hätte so eine Herangehensweise?

02.11.2021 - 10:00 Uhr

Oha, ich dachte gespeicherte Prozeduren sind das "Non plus ultra" der Sicherheit. Na man lernt nie aus.
Vielen Dank für die Tips!

02.11.2021 - 06:18 Uhr

Moin,

der Titel sagt schon alles, wann macht es Sinn gespeicherte Prozeduren zu nutzen?
Klar, wenn es komplexe Abfragen sind.
Klar, um Injection zu vermeiden.
Aber macht es auch Sinn bei "einfachen Abfragen" wie beispielsweise: SELECT Id, Name, Nummer FROM Mitarbeiter WHERE Alter < 30 ?

15.03.2021 - 11:27 Uhr

Top, danke Dir!

15.03.2021 - 10:08 Uhr

Hallo Gü,

ich greife direkt auf die DB mittels SQLClient zu.

Also wäre die beste Möglichkeit dann anhand der gesendeten Filter das Statement "händisch" zu erstellen und auszuführen?

15.03.2021 - 09:48 Uhr

Verwendetes Datenbanksystem: <SQL>

Hallo zusammen, folgende Situation:
Es sollen Abfragen an eine Web-Rest-API gesendet werden, mit verschiedenen möglichen Filtern. Die Filter können sehr variable gestaltet sein, es können drei int - Arrays mit je sechs Werten sein, oder aber auch nur ein string-Wert.
Die API wurde in C# entwickelt, steht schon in den Grundzügen und greift auf eine MSQL Datenbank zu.
Gibt es eine Möglichkeit eine SQL Abfrage so dynamisch zu gestalten, dass jeder mögliche "Filter-Fall" abgedeckt wird, oder muss ich die Abfragen mittels if-then händisch als SELECT Statement schreiben?
Aktuelle gibt es folgende Filter, die können aber jederzeit variieren:
string Wert1 (kann auch null sein)
int[] Wert2 (0 - 30) (kann auch null sein)
int[] Wert3 (0 - 30) (kann auch null sein)
int[] Wert4 (0 - 30) (kann auch null sein)

Ich hoffe ich konnte mich verständlich ausdrücken
Danke schonmal!

Kriz

18.02.2021 - 09:36 Uhr

Hallo zusammen,

ich hoffe ich bin in diesem Unterforum richtig.

Es soll eine mobile App entwickelt werden, verschiedenste Daten sollen von einem Server abgerufen werden.
Mein erster Gedanke war einfach direkte SQL Anfragen an den Server zu schicken. Es bestände aber auch die Möglichkeit eine Rest-WebAPI zu entwickeln. Das habe ich zwar noch nie gemacht, aber man lernt ja nie aus.
Würde das Sinn machen und wenn ja, warum? Die Daten sind nur für mich bzw nur für die App gedacht, also keine weiteren Zugriffe, außer von dieser App.

Ich hoffe, ich konnte mich verständlich ausdrücken.

Vielen Dank schonmal!
Kriz

29.01.2021 - 09:35 Uhr

@FZelle
Also die UI wird an ein ViewModel gebunden und dieses instanziert die Klasse MP3Import
In einem Task wird dann die Funktion Import der Klasse MP3Import aufgerufen.

@TH69
das ist WPF
Die Methode SaveMP3ToDatabase wird nicht im UI Thread aufgerufen, habe aber auch keine Exception unterdrückt.

Wie gesagt, sowohl bei mir auf dem Rechner, als auch auf einem zweiten Rechner funktioniert alles einwandfrei, nur eben auf dem Kunden PC nicht.

29.01.2021 - 07:03 Uhr

Guten morgen zusammen,

folgende Situation:
Ich habe eine kleine Jukebox entwickelt. Der User gibt in einem Import-Fenster die Location der MP3 Files an und die Jukebox speichert Titel, Interpret, Album und Pfad zur MP3 in einer internen Datenbank.
Nach jedem "importiertem" File wird ein Event gefeuert um den User anzuzeigen wie der Fortschritt ist:

Event:

public static event EventHandler<string> onSongAdded;
protected virtual void OnSongAddedRais(string e)
        {
            EventHandler<string> raiseEvent = onSongAdded;
            if (raiseEvent != null)
            {
                raiseEvent(this, e);
            }
        }

Und hier wird es ausgelöst:

private void SaveMP3ToDatabase(string path)
        {
            var tfile = TagLib.File.Create(path);
            
            Song song = new Song()
            {
                Title = tfile.Tag.Title,
                Interpret = GetInterpretOrCreateNew(tfile.Tag.Performers[0]),
                Album = GetAlbumOrCreateNew(tfile, path),
                Location = path,
                Duration = tfile.Properties.Duration
            };
            song.Album.Tracklist.Add(song);
            CurrentImportedSong = song;
            CheckAndSaveSongs(song);
            db.Albums.AddOrUpdate(song.Album);
            db.SaveChanges();
            OnSongAddedRais($"{song.Interpret.Name} - {song.Title}");
        }

Und hier wird es abboniert:

ImportMP3.onSongAdded += AssignTitle;

Mein Problem ist nun folgendes:
Auf meinem Entwickler PC und auf einem zweiten PC, den ich zuhause habe, funktioniert das feuern der Events ohne Probleme, die UI zeigt immer den aktuell importierten Titel an. Und alle Titel werden korrekt importiert.
Auf dem Kunden PC werden die Events anscheinend aber nicht ausgelöst. An der UI tut sich nichts, aber der Import erfolgt.
Kurioserweise tritt das Problem nur an dieser Stelle auf, denn an vielen anderen Stellen in der Software arbeite ich erfolgreich mit Events, nur hier wollen sie nicht, wie sie sollen.
Woran kann das liegen?

Vielen Dank im Vorraus!
Kriz

07.01.2021 - 09:48 Uhr

So einen ähnlichen Ansatz hatte ich auch schon und bekam folgenden Fehler:

Fehlermeldung:
Newtonsoft.Json.JsonSerializationException: "Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'System.Collections.Generic.Dictionary`2[System.String,JSON.Test]' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.
To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.
Path '', line 1, position 1."

07.01.2021 - 07:50 Uhr

verwendetes Datenbanksystem: <JSON/CSV>

Guten Morgen zusammen!
Ich spiele gerade etwas mit Firebase rum und versuche gerade eine von Firebase erstellte JSON Datei in CSV zu konvertieren. Allerdings hat die JSON Datei ein recht ungewöhnliches Format und ich beiße mir daran die Zähne aus:

{  
  "-MQJvfjVAiEiMCYmIVB3" : {
    "CorrectAnswers" : 9,
    "GiveTime" : false,
    "ID" : 10,
    "ItemsPerSecond" : 0.224,
    "JustNewPLUs" : false,
    "ListID" : 0,
    "MaxPLU" : 2002,
    "MinPLU" : 57,
    "PLUListeID" : "PLUsToLearn",
    "Passed" : false,
    "Percent" : 45.0,
    "Points" : 40,
    "Querys" : 20,
    "TimeInSeconds" : 89,
    "TimeOfTesting" : "2021.01.06 - 00:41",
    "Timekeeping" : false,
    "doTimekeeping" : false
  },
  "-MQJw7XYVf0QgmlY4kjT" : {
    "CorrectAnswers" : 10,
    "GiveTime" : false,
    "ID" : 11,
    "ItemsPerSecond" : 0.229,
    "JustNewPLUs" : false,
    "ListID" : 0,
    "MaxPLU" : 2399,
    "MinPLU" : 1,
    "PLUListeID" : "049.005.003",
    "Passed" : false,
    "Percent" : 50.0,
    "Points" : 114,
    "Querys" : 20,
    "TimeInSeconds" : 87,
    "TimeOfTesting" : "2021.01.06 - 00:43",
    "Timekeeping" : false,
    "doTimekeeping" : false
  },
  "-MQJwUSCG9BvNjif3R4_" : {
    "CorrectAnswers" : 10,
    "GiveTime" : false,
    "ID" : 12,
    "ItemsPerSecond" : 0.27,
    "JustNewPLUs" : false,
    "ListID" : 0,
    "MaxPLU" : 2399,
    "MinPLU" : 291,
    "PLUListeID" : "049.005.003",
    "Passed" : false,
    "Percent" : 50.0,
    "Points" : 94,
    "Querys" : 20,
    "TimeInSeconds" : 74,
    "TimeOfTesting" : "2021.01.06 - 00:45",
    "Timekeeping" : false,
    "doTimekeeping" : false
  }
}

Der Hashcode beispielsweise "MQJw7XYVf0QgmlY4kjT" wird von Firebase erstellt und ist für mich nicht relevant.
Die Objekte, die erstellt werden sollen, sind vom Typ "Test":

public class Test
    {        
        public int CorrectAnswers { get; set; }
        public bool GiveTime { get; set; }
        public int ID { get; set; }
        public double ItemsPerSecond { get; set; }
        public bool JustNewPLUs { get; set; }
        public string ListID { get; set; }
        public int MaxPLU { get; set; }
        public int MinPLU { get; set; }
        public string PLUListID { get; set; }
        public bool Passed { get; set; }
        public double Percent { get; set; }
        public int Points { get; set; }
        public int Querys { get; set; }
        public int TimeInSeconds { get; set; }
        public DateTime TimeOfTesting { get; set; }
        public bool Tiomekeeping { get; set; }
        public bool doTimekeeping { get; set; }
    }

ich habe schon verschiedene Ansätze ausprobiert, beispielseise Helfererklassen erstellt:

public class RootObject
    {
       public List<Helper> PoolData { get; set; }
    }

public class Helper
    {
        public string ID { get; set; }
        public Test _Test { get; set; }
    }     

aber nichts führt zu Erfolg, entweder Fehlermeldungen, oder ein leeres RootObject.

Mit folgendem Code lese ich das File ein:

string json = System.IO.File.ReadAllText(@"C:/Projects/file.json");
var tmp = JsonConvert.DeserializeObject<RootObject>(json);

Vielleicht kann mir ja jemand auf die Sprünge helfen.

Vielen Dank schonmal!

10.12.2020 - 05:03 Uhr

Guten Morgen!

Gibt es eine Möglichkeit an den Konstruktor eines ViewModels einen Parameter zu übergeben, ohne das CodeBehind File zu nutzen?

Also im Moment mache ich es so:

public Settings()
        {
            InitializeComponent();
            BindingContext = new ViewModel(Parameter);
        }

würde das ganze aber gerne irgendwie in XAML umsetzen.

Vielen Dank schonmal!
Chris

08.10.2020 - 05:42 Uhr

Guten Morgen,

Ich tue mich etwas schwer mit meinem Mediaplayer...
Ich möchte kontrollieren, ob gerade ein MP3 läuft, wenn nicht, soll eins gestartet werden. Die Kontrolle, ob etwas läuft, soll ununterbrochen stattfinden, also in eine while-Schleife gepackt.
Um meinen Main Thread nicht zu blockieren, starte ich dies in einem separaten Thread, dann startet aber die Musik nicht. Erst wenn ich einen Breakpoint setze geht es los.

Aufruf aus meinem Mainthread:

Task.Run(() => StartPlayer());

Mein Player:

private Task StartPlayer()
        {
            mediaPlayer = new MediaPlayer();
            while (true)                
            {
                if (mediaPlayer.Position <= new TimeSpan(0,0,0))
                {
                    if (Playlist.Count > 0)
                    {
                        
                        mediaPlayer.Close();
                        mediaPlayer.Open(new Uri(Playlist[0].Location));
                        mediaPlayer.Play();
                        CurrentTitle = Playlist[0];
                    }
                }
            
            };
        }
05.10.2020 - 12:28 Uhr

Was mir nicht in den Kopd geht, ist dass die Anwendung ohne Probleme läuft und auch im ViewModel direkt kein Fehler angezeigt wird, nur im XAML Editor...

05.10.2020 - 12:13 Uhr

Das Netzwerkproblem, das beschrieben wird, existiert ja nur im XAML Editor. Sowohl im ViewModel, als auch In der laufenden Anwendung werden keine Fehler angezeigt. Wo suche ich denn da?
Und die drei Schichten-Architektur wird doch in dem Fall umgesetzt?! Ich habe meine Datenbankklasse, meine UI und das ViewModel, was die beiden verbindet, oder verstehe ich da was falsch?

05.10.2020 - 10:58 Uhr

Hallo zusammen,

ich weise meiner View das Viewmodel in XAML zu:

<Window.DataContext>
    <ViewModel:Home_VM x:Name="VM"/>
</Window.DataContext>

Hier wird mir die mittlere Zeile als Fehler markiert:> Fehlermeldung:

Netzwerkbezogener oder instanzspezifischer Fehler beim Herstellen einer Verbindung mit SQL Server. Der Server wurde nicht gefunden, oder auf ihn kann nicht zugegriffen werden. Überprüfen Sie, ob der Instanzname richtig ist und ob SQL Server Remoteverbindungen zulässt. (provider: SQL Network Interfaces, error: 26 - Fehler beim Bestimmen des angegebenen Servers/der angegebenen Instanz)

Mein ViewModel:

public class VM : BaseViewModel
    {

        private ObservableCollection<Song> _HitList;

        public ObservableCollection<Song> HitList
        {
            get
            {
                using (var db = new DB())
                {
                    List<Album> ListOfAlbums = new List<Album>(db.Albums);
                    List<Interpret> interprets = new List<Interpret>(db.Interprets);
                    return new ObservableCollection<Song>(new List<Song>(db.Songs.OrderBy(x => x.Played)).Take(10));

                }
            }
            set
            {
                _HitList = value;
                RaisePropertyChanged(nameof(HitList));
            }
        }

        private ObservableCollection<Album> _WhatsNewList;
        public ObservableCollection<Album> WhatsNewList
        {
            get
            {
                using (var db = new DB())
                {
                    List<Interpret> interprets = new List<Interpret>(db.Interprets);
                    List<Album> ListOfAlbums = new List<Album>(db.Albums);
                    List<Album> Sorted = new List<Album>(ListOfAlbums.Where(x => DateTime.Parse(x.ImportDate) > DateTime.Now.AddDays(-7)));
                    return new ObservableCollection<Album>(Sorted);
                }

            }
            set
            {
                _WhatsNewList = value;
                RaisePropertyChanged(nameof(WhatsNewList));
            }
        }

        public VM()
        {

        }
    }

Die App wird zwar fehlerfrei gebaut und funktioniert auch einwandfrei, aber sobald ich im XAML Code arbeiten will, hängt sich VS für mehrere Sekunden auf, und das jedes mal wenn ich was tippe, kopiere, oder lösche, arbeiten also unmöglich.

Es liegt wohl daran, dass im Konstruktor meines Viewmodels bzw in den Propertys bei der Initialisierung der Klasse, auf die DB (in meinem Fall Entity Framework) zugegriffen wird.
Wenn ich alle DB Zugriffe auskommentiere, ist das Problem auch verschwunden.
Wie kann ich nun die Klasse aufbauen, dass beim Starten der Anwendung auf die DB zugegriffen wird, ohne dass mir dieser Fehler die Arbeit undmögloch macht?

Vielen Dank im Vorraus!

20.08.2020 - 19:52 Uhr

Hallo zusammen,
ich möchte in einer Xamarin.Shell Anwendung eine neue Seite aufrufen und einen Parameter übergeben. Leider kommt der Parameter nicht an. hier mein Code:

private async void GetInformation(string ID)
        {
            Routing.RegisterRoute(nameof(Views.BookDetails), typeof(Views.BookDetails));
            await Shell.Current.GoToAsync($"{nameof(Views.BookDetails)}?BookID={ID}");
        }

Hier hat die ID noch einen Wert

    [QueryProperty(nameof(BookID), nameof(BookID))]
    public partial class BookDetails : ContentPage
    {
        public string BookID 
        { 
            get => id; 
            set 
            { 
                id = Uri.UnescapeDataString(value); 
                OnPropertyChanged(); 
            } 
        }
        public string id;
        public BookDetails()
        {
            InitializeComponent();
            BindingContext = new ViewModels.BookDetails_VM(string id);
        }

Hier sollte die ID eigentlintlich ankommen, aber die Werte sind immer null.
Was übersehe ich? Ich hab zig Dokumentationen gelesen, aber irgendwo stimmt was nicht...

Schonmal vielen Dank!

06.11.2019 - 08:12 Uhr

Weil ich mich, wie gesagt, überhaupt nicht mot dem Thema auskenne und dem entsprechend auch gar nicht weiß was ich brauche. Bis jetzt dachte ich, dass ich mich mittels putty in meine domain einloggen um dort einfach die exe zu starten, aber anscheinend reicht das doch nicht. Aber stimmt, der Kundenservice ist dann mal meine nächste Anlaufstelle.
Danke

04.11.2019 - 08:30 Uhr

LaTino,
das ist der 1&1 Basic Vertrag vermute es wird dieses schräge Webhosting sein. An und für sich hatte die die Domain damals für ein ganz anderes Projekt (normale Website) gebucht. An APIs dachte ich da noch nicht und in meinen Einstellungen sehe ich auch nirgends irgendwas von Servern oder Webservices oder irgendetwas in der Richtung.

03.11.2019 - 22:26 Uhr

Vielen Dank für die Antwort!
Mein grösstes Problem ist es die Api auf meinem Domain zum laufen zu bekommen. Wenn ich das Projekt deploye, erhalte ich ca 400 Files inkl einer Exe. Die ganzen Files lade ich dann auf meine Domain hoch, habe dann aber Probleme dir Exe zu starten.
Ich habe die Domain von 1&1 und kann via Putty auf die Domain zugreifen, wenn ich aber versuche die Exe zu starten, bekomme ich nur als Meldung "permission denied".
Auch habe ich die Exe bei den cronjobs hinzu gefügt, aber zugreifen kann ich immernoch nicht auf die api... 404 die ganze Zeit

Gibt es irgendwo ein Tutorial für richtig Dumme, wie ich die Api auf meIner Domain zum Laufen bekomme? Hatte nicht gedacht dass das so viel Zeit in Anspruch nimmt..

ich bin langsam auch schon so weit, dass ich statt einer api einfach ein Textfile erstelle und per sftp auf meine Domain lade. Das wäre funktional, wenn auch nicht die perfekte Lösung.

Kriz

03.11.2019 - 16:45 Uhr

Hallo zusammen,
folgender Sachverhalt:
Ich habe eine App, welche im Rahmen einer "Registrierung" verschiedene Daten vom Nutzer abfragt. Diese Daten (es handelt sich einfach nur um fünf einfache strings) möchte ich nun in irgendeiner Form zugeschickt bekommen. Nach etwas googeln habe ich mir überlegt das per web api zu bewerkstelligen. Da ich mich alleridings noch nie mit dem Thema beschäftigt habe, Ist das eine mittelschwere Herausforderung.
ich habe mich an diese Anleitung gehalten hier
Wenn ich mittels postman auf die api zugreife, funktioniert das auch. Wenn ich nun das Projekt veröffentliche (in einen Ordner) habe ich dort aber ca 20 verschiedene Files, lade ich die nun einfach auf meine Domain und kann da dann genau so darauf zugreifen wie in Postman? Nur halt localhost mit der domain ersetzen?
Und wie sieht dann normaler http post befehl aus wie ich ihn dann in meiner app nutzen möchte?

Ich hoffe ich habe mich halbwegs verständlich ausdrücken können.

Kriz

02.11.2019 - 18:54 Uhr

Servus zusammen!
Ja ich weß, die Frage hat weniger mit C# zu tun, aber mir wurde hier schon mehr als ein mal gut geholfen im Forum, daher versuche ich es trotzdem mal.
Ich habe mit Xamarin eine Android App entwickelt und AdMob zum vermitteln von Werbeanzeigen eingerichtet. Bis dahin auch alles fein und es lief gut an. Dann wurde meine App auf meiner Arbeit vorgestellt und die Downloadzahlen und damit die Werbeabrufe von einen Tag auf den anderen verfünffacht. Das brachte Google dazu meinen Account zu überprüfen weil man davon ausgeht, dass da was nicht richtig sein kann. Dadurch werden keine bis kaum Anzeigen mehr ausgeliefert und meine Einnahmen sind nur noch einpaar Cent.
Meine Frage ist nun, hat jemand Erfahrung mit dieser Situation und einen Anhaltspunkt wie lange das dauern kann? Von Google kommt.gar keine Antwort auf die Frage und im Comunotyforum bekomme ich auch keine klare Antwort...

Schonmal Danke!!
Kriz

12.10.2019 - 20:22 Uhr

@Abt
Vielen Dank für die Antwort! Ich wusste ja nicht mal wonach ich suche, aber Post Endpunkt und API ist natürlich ein super Ansatz!
Ich danke Dir für den Denkanstoss!
Kriz

12.10.2019 - 19:55 Uhr

Guten Abend,
ich habe schon einiges gegoogelt, hab aber noch nicht das richtige gefunden...
Ich möchte aus einer App heraus Daten an meinen Server senden (XML Datei und später auch jpg). Aktuell mache ich es so, dass die Datei mir per Email geschickt wird und ich sie dann auf den Server lade. Was ja derbst unproduktiv ist.
Nun gibt es ja die HTTP Post Möglichkeit. Nun meine Frage: Wohin schicke ich die Datei? Also wie sieht so ein Empfänger aus? Bastel ich den selber? Bietet mein Domain Hoster den an? Gibts den bei OBI?

Ich hoffe ich konnte meine Frage verständlich ausdrücken...

Schonmal vielen dank!!Kriz

17.08.2019 - 13:15 Uhr

Ich bedanke mich für die Antworten!!

16.08.2019 - 20:25 Uhr

Hallo zusammen!

Ich entwickel gerade eine kleine Android-App. Dafür würde ich gerne CSV-Datein und einige PNG Dateien von meiner Internetdomain runterladen. Die Domain ist eine stink-normale, bei 1&1 gehostete Internetdomain. Die Dateien die runter geladen werden sollen, sind auch nicht sicherheitsrelevant, also keine sensiblen Daten, Hinz und Kunz könnten sie lesen, würden sich aber wahrscheinlich nicht dafür interessieren.
Kann ich die Daten einfach auf meine Domain uploaden und dann von der App downloaden, oder gibt es da Sicherheitsaspekte die ich beachten müsste? In ferner Zukunft werden auch andere diese App nutzen und diese Daten runter laden.

Vielen Dank!
Kriz

28.07.2019 - 08:10 Uhr

Guten Morgen Freunde der Sonne!

Sorry für den Titel, mir ist leider nichts besseres eingefallen...

Folgende Situation:
Ich habe ein View mit (unter anderem) einem Datagrid. In meinem Viewmodel habe ich eine ObservableCollection<Person> welche als Source für das Datagrid dient.

class Schedule
{
    public string Name { get; set; }
    public string ShortSymbol { get; set; }
}
class Person
{
    public ObservableCollection<Schedule> plannedSchedule { get; set; }
}

Diese _ObservableCollection _hat wiederum eine ObservableCollection<Schedule> mit der ich im CodeBehind die Spalten für das Datagrid erstelle. Ja, sowas sollte nicht im CodeBehind gemacht werden. Da aber _plannedSchedule _immer eine andere Anzahl aufweist, wusste ich mir nicht besser zu helfen.

for (int i = 0; i <= Days-1; i++)
{
    DataGridTextColumn dataGridTextColumn = new DataGridTextColumn()
    {
        Header = MasterRota.StartDate.AddDays(i).ToString("dd.MM.", german),
        Binding = new Binding($"plannedSchedulesThisWeek[{i}]")
    };           
    DGrid.Columns.Add(dataGridTextColumn);
}

Bis hierhin funktioniert auch alles super. Die Spalten werden alle korrekt abgebildet und gegen als ToString() die property _Name _wieder.

Nun habe ich mir einen Trigger gebastelt, der unter bestimmten Voraussetzungen dafür sorgen soll, dass nicht die Name Property, sondern die _ShortSymbol _Property wieder gibt. Und hier komme ich nicht weiter:

<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.UseShortSymbol}" Value="true">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Grid Background="{TemplateBinding Background}">
                    <ContentPresenter HorizontalAlignment="Center" Content="{Binding ShortSymbol}"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</DataTrigger>

Es wird mir der Fehler angezeigt, dass die Klasse Person keine Eigenschaft ShortSymbol besitzt, was ja richtig ist. Aber das Binding ist doch auf ein plannedSchedule, nicht auf Person?!? Wie komme ich an das richtige Binding um auf das korrekte plannedSchedule.ShortSymbol zuzugreifen?

24.07.2019 - 10:21 Uhr

@ BhaaL
ne, das Viewmodel wird im Konstruktor vom View erst erstellt

aber stimmt, jetzt wo du es sagst kann ich ja das Viewmodel auch vorher schon, also mit dem View zusammen instanzieren und als DataContext setzen und so dann auch das Event abonieren...

24.07.2019 - 05:20 Uhr

Guten Morgen!

Ich habe ein Hauptfenster, von dem aus ich ein weiteres Fenster zum Speichern von Daten öffne.
Wenn ich nun in dem Speichern-Fenster bestätige, wird dieses geschlossen und ein Event gefeuert "HabeGespeichert". Wie kann ich im ViewModel meines Hauptfensters auf das Event des ViewModels meines Speichernfensters zugreifen? Also es abonieren.
Oder gibt es für so einen Fall ein anderes Best Practise?

Danke Euch!

16.07.2019 - 11:34 Uhr

Alles klar, dann werde ich den Ansatz von Thomas.at verfolgen.
Vielen Dank für Eure Hilfe!!

16.07.2019 - 07:54 Uhr

Die Idee hatte ich auch, aber wie sieht es da mit der Performance aus? Nehmen wir mal an, wir haben 100 Mitarbeiter die alle eine fünf Tage Woche haben und keinen Urlaub machen, dann haben wir 26.000 Einträge. Ist das eine normale Größenordnung, oder werden Abfragen da länger dauern? Mein Kenntnisstand bei Datenbanken ist eher rudimentär...

16.07.2019 - 05:00 Uhr

Die Situation ist folgende:

Es wird ein Dienstplan für ein Restaurant geschrieben. Dieses Restaurant hat jeden Tag im Jahr geöffnet (jaja, die armen Gastronomen!), daher die 365 Spalten. Nun bekommt jeder Mitarbeiter eine eigene Zeile, mit den IDs für die Schichten je Tag. Die Schichten sind dann in einer separaten Tabelle wo auch die Pausen und sonstige weitere Informationen abgelegt sind.
Nun arbeitet natürlich niemand 365 Tage durch, somit wird die ein oder andere Spalte bei den Mitarbeitern leer sein.
Aktuell habe ich es so gelöst, dass ich die Dienstpläne wochenweise speicher.
Dafür habe ich folgende Tabellen:

  1. Tabelle mit Informationen zum Dienstplan (Dienstplan ID, Startdatum, Notizen, usw)

  2. Tabelle die einer Dienstplan ID die passenden Mitarbeiter mit den Verweisen zu den gearbeiteten Schichten verknüpft. Pro Dienstplan ID gibt es mehrere Zeilen, pro Mitarbeiter eine. Das angefügte Bild veranschaulicht es vllt etwas. (DiID = Dienstplan ID, MiID = Mitarbeiter ID, und unter den Tagen sind die jeweiligen IDs für die gearbeiteten Schichten)

  3. Tabelle für die gearbeiteten Schichten inkl Pausenzeiten usw.

Das wirkt für mich langsam alles wie eine "Flickschusterei" und etwas umständlich, besonders wenn ich Auswertungen vornehmen möchte wann wer wie gearbeitet hat, wieviel Mitarbeiter durchschnittlich zu einem einem bestimmten Zeitpunkt da sind und so weiter.
Daher dachte ich mir, dass ich einfach eine Jahrestabelle erstelle...

15.07.2019 - 09:46 Uhr

Was wäre denn der Vorteil der zweiten Variante?
In der aktuellen Situation kann ich mit meinem Reader direkt auf die passende Spalte zugreifen.
In deinem Vorschlag müsste ich ja dann die komplette Zeile einlesen, splitten, um dann auf den passenden Eintrag/Spalte zugreifen zu können.
Wäre das schneller bzw speichersparsamer?

15.07.2019 - 05:28 Uhr

verwendetes Datenbanksystem: SQLITE

Guten Morgen Freunde der Sonne,
Ich braucht eine Tabelle mir 365 Spalten. Durchnummeriert von 1 - 366. Gibt es bei sqlite von Haus aus eine Möglichkeit Spalten automatisch erzeugen zu lassen, oder muss ich das über eine for Schleife in C# machen?

Vielen Dank im voraus!
kriz

16.01.2019 - 12:43 Uhr

Servus zusammen,

Folgendes Szenario:
Benutzer nimmt ein Foto von einem Dienstplan mit dem Handy auf. Auf diesem Foto möchte ich nun anhand der Linien erkennen wie schief das Bild gemacht ist, es richtig rotieren, zurecht schneiden und mittels OCR die Arbeitstermine auslesen.
Gibt es zum erkennen der Linien eine einfach Möglichkeit? Alles andere stellt kein Problem.da,mir gehts nur um das erkennen der Linien...

Danke euch!
Kris

13.01.2019 - 22:11 Uhr

Ich habe eine Klasse die Datenbankabfragen durchführt und bei Bedarf eine Liste bzw eine ObservableCollection verschiedenster Klassen zurück gibt. Also mal eine Liste mit emploees, mal mit contracts, mal mit schedules, usw... bis jetzt habe ich das mit object umgesetzt, also es wurde immer eine ObservableCollection<object> zurück gegeben. Nun komm eich aber an einen Punkt wo es einfacher wäre, wenn ich die ObservableCollection schon mit dem passenden Datentyp zurück bekommen würde.

13.01.2019 - 21:47 Uhr

Ist schon etwas länger her, aber ich versuch es hier trotzdem nochmal...

Wenn ich nun eine Methode mit einer generischen ObservabeleCollection als Rückgabe deklariere, dann bekomme ich als Fehlermeldung: > Fehlermeldung:

Konvertierung von Emloyee in T nicht möglich. Wie muss ich es richtig angehen?

mein Code (Beispiel):


public static ObservableCollection<T> getList<T>()
        {
            ObservableCollection<T> result = new ObservableCollection<T>();

            Common.Employee employee = new Common.Employee(); //Hier die Datenbankabfrage
            result.Add(employee);

            return result;
        }

14.11.2018 - 16:35 Uhr

Servus zusammen,

ich habe eine WPF App in der eine Fenster teilweise per Code gefüllt wird. Da das aufbauen des Fensters etwas dauert möchte ich mit einem Loading Screen arbeiten. Beim ersten Laden des Fensters bekomme ich über ContentRendert bescheid wenn das Fenster "bereit" ist. Soweit kein Problem.
Der Nutzer hat die Möglochkeit per Combobox einen Monat auszuwählen woraufhin die Seite teils neu aufgebaut wird. Welches Event wird denn da gefeuert wenn er fertig ist, ContentRenderd ost es nicht...
Kann gerade leider keinen Code posten da ich unterwegs bin, aber vllt habe ich mich verständloch ausdrücken können und jemand hat schonmal einen Ratschlag.
Danke!
Kriz

22.08.2018 - 05:13 Uhr

@coffeebeans und Taipi88,

Anfangs hatte ich auch pro Klasse eine eigene Datenbankabfrage bis mir dann aufgefallen ist, dass sich viele Sachen wiederholt haben und mir eine Klasse für Abfragen sinnvoller vorkam. Aber tatsächlich wird es langsam unübersichtlich...

Was hat es mit diesem Dapper bzw Mapper auf sich?

entschuldige - aber du benutzt doch schon Generics - wieso dann nicht richtig ?!

Es ist doch kein Problem eine generische Klasse zu schreiben, welche automatisch die richtige Abfrage je nach Objekttyp sendet (als Constraint könntest du hier sogar die Mitarbeiter-Klasse angeben) und das dann sogar typsicher zurück liefert...

Da tuh ich mich gerade etwas schwer dran... wie genau meinst du das? Also ich möchte jetzt keinen fertigen Code, sondern eher einen Verstehensanstoss... und wie und wo kommt dieser Mapper ins Spiel?

@witte
Wenn ich es richtig verstanden habe, dann bedeutet ORM schlicht dass pro Klasse eine Tabelle vorliegt wo für jede Property eine Spalte existiert. Und das ist schon so. Oder hab ich da was falsch verstanden?

Vielen Dank!
Kriz

20.08.2018 - 05:06 Uhr

Moin zusammen,

folgender Sachverhalt:
in meinem Projekt habe ich mehrere Klassen, beispielsweise Mitarbeiter, Schichten, oder Feiertage.
Nun habe ich eine Datenbank in der diese Mitarbeiter, Schichten und Feiertage abgelegt sind.
Zum Abrufen der Daten habe ich eine Methode geschrieben die eine ObservableCollection<object> zurück gibt, damit ich nicht für jede Klasse eine eigene Abfrage schreiben muss die dann den jeweiligen Typ wieder gibt. Ich hoffe ich konnte es verständlich erklären
Nun zu meiner Frage: Gibt es eine Möglichkeit diese ObservableCollection<object> in eine ObservableCollection<Mitarbeiter> zu konvertieren?


public static ObservableCollection<object> GetListOf(string ObjectName)
        {
                ObservableCollection<object> tmpList = new ObservableCollection<object>();
                SQLiteConnection connection = new SQLiteConnection() { ConnectionString = Const.DatabaseConnectionString() };

                SQLiteCommand command = new SQLiteCommand(connection);
                command.CommandText = "SELECT * FROM " + ObjectName + " WHERE IsDeleted LIKE 'FALSE' AND ID != '0' ORDER BY Name";
                connection.Open();

                SQLiteDataReader reader = command.ExecuteReader();

                switch (ObjectName)
                {
                    case "Employee":
                        List<Employee> newList = new List<Employee>();
                        while (reader.Read())
                        {
                            Employee tmpEmployee = new Employee()
                            {
                                //Hier werden dann die verschiedenen Eigenschaften befüllt
                            };
                            newList.Add(tmpEmployee);
                        }
                        newList.Sort();
                        tmpList = new ObservableCollection<object>(newList);
                        connection.Close();
                        connection.Dispose();
                        command.Dispose();
                        
                        return tmpList;

                      case "Holiday":
                        while (reader.Read())
                        {
                            Common.Holiday tmpHoliday = new Common.Holiday()
                            {
                                //Hier werden dann die verschiedenen Eigenschaften befüllt
                            };
                            tmpList.Add(tmpHoliday);
                        }
                        connection.Close();
                        command.Dispose();
                        connection.Dispose();
                        return tmpList;

                       //Und noch einige weitere case-Bedingungen...

        }

Wenn ich dann die Liste meiner Mitarbeiter brauche:


ObservableCollection<object> NeueListe = Datenbank.GetListOf("Employee");

Ich hoffe ich konnte rüberbringen was ich meine...

Danke im Vorraus!
Kriz

01.08.2018 - 21:18 Uhr

@Abt

Nachdem ich deinem Link gefolgt und mich noch etwas weiter gebildet habe, habe ich heraus gefunden, dass Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "myApp")den Ordner erstellt hat, allerdings nicht an der von mir erwarteten Stelle, sondern etwas weiter in den Tiefen des AppData-Verzeichnisses...
Wie es scheint wurde alles korrekt gespeichert und geladen.

Was allerdings immer noch nicht funktioniert ist das öffnen des PDF-Files... obwohl der gleiche Pfad zum speichern und öffnen benutzt wird, funktioniert nur das speichern. Wenn ich Process.Start(<pfad>) aufrufe, öffnet der IE nur für max eine Sekunde und schließt direkt wieder und im Debug-Fenster steht dass die Datei nicht gefunden wird...

01.08.2018 - 17:06 Uhr

Moin zusammen,

folgender Sachverhalt: Ich entwickel eine WPF App, diese wollte ich im Windows-Store hochladen. Dafür muss ich die Desktop-Bridge benutzen.
Nun besteht mein Projekt aus meiner eigentlichen App und dem Paketprojekt.

Meine App speichert einige Sachen im Roamingfolder, also standartmäßig C:\User&lt;Username>\AppData\Roaming\myApp, den Dateipfad bekomme ich über

Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "myApp")

Wenn ich nun meine App aus Visual Studio starte und der Startpunkt das Paketprojekt ist, dann ergibt sich folgendes Problem:
Beim Start der App sollen zwei Dateien aus dem App-Stamm-Verzeichnis ins AppData\Roaming-Verzeichnis kopiert werden. Das scheint zu funktionieren, denn wenn ich es zwei mal hintereinander versuche, dann wird beim zweiten mal eine Exception geworfen dass das File schon vorhanden ist.
Nur kann ich den App-Ordner nicht im Roaming-Verzeichnis finden... Die App läuft bis zu diesem Zeitpunkt ohne Probleme, es wird auch auf die Daten korrekt zugegriffen die kopiert wurden, aber wie gesagt, ohne dass das Verzeichnis offenbar vorhanden ist. Wenn ich im Debugmodus einen Haltepunkt an der entsprechenden Stelle setze, dann wird auch das korrekte Verzeichnis beim kopieren angegeben.

Ein weiteres Problem ist, dass ich ein PDF erzeuge, dieses speicher (im Roaming-Verzeichnis) welches zu klappen scheint da keine Fehlermeldung kommt. Wenn ich nun versuche die PDF mit Process.Start() zu öffnen, wird kurz der IE angezeigt (mein Standartrogramm für PDF) und schliesst direkt wieder, im Debugfenster sehe ich dann dass die gesuchte Datei nicht gefunden wurde...

Letztes Koriosum... wenn ich das alles nicht im Roamingverzeichnis, sondern beispielsweise "C:\myApp", dann funktioniert alles ohne Probleme...

Hab ich irgendwo einen Denkfehler?

Vielen Dank!
Kriz

09.07.2018 - 14:57 Uhr

Ja das wars auch. Hatte falsch gegoogelt.
Trotzdem danke!!

09.07.2018 - 14:46 Uhr

Ich denke ich habe nötige Informationen vergessen...
Ich möchte log4net auaprobieren, dieses wird in der app.config konfiguriert. Es geht also nicht um ein View 😃