Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Rioma
Thema: Token-Authentifizierung ohne IdentityServer skalieren
Am im Forum: Web-Technologien

Alles klar danke.

@Abt dein neues Beispiel auf Github hilft sehr! Github

Thema: Token-Authentifizierung ohne IdentityServer skalieren
Am im Forum: Web-Technologien

Zitat
warum nicht? Mit dem wäre das Problem schon gelöst.

Das Backend hat einen kleinen Funktionsumfang und muss relativ häufig installiert werden (Jedes mal liegt eine andere Datenbank mit Benutzern dahinter). Um den Aufwand möglichst gering zu halten, wurde sich damals für das Paket AspNet.Security.OpenIdConnect.Server entschieden, was mit dem Backend ausgeliefert wird.
Außerdem würde ein für sich laufender IdentityServer die Ausfallsicherheit nicht besonders erhöhen, da nun lediglich der IdentityServer ausfallen müsste, um die Applikation unbrauchbar zu machen.
Zitat
warum nicht? Mit dem wäre das Problem schon gelöst.

Der IdentityServer würde ein Token ausstellen und ich würde in der Web API den IdentityServer als Issuer eintragen. Woher wissen die einzelnen API´s, das dass Token gültig ist? Ich nehme an, der IdentityServer muss nicht bei jedem Request gefragt werden.

Ich durchsuche gerade die Spezifikation des OpenID Connect Protokolls um eine Antwort zu finden. Allerdings wird es mir noch nicht 100% klar.
Zitat
Hast du dann bei deiner OpenId-Variante ein Authentifizierung gegen was?
Die Applikation läuft stets in einem internen Netzwerk und die Credentials werden gegen eine Datenbank geprüft. Es ist quasi ein Resource Owner Password Credentials Flow.

Vielen Dank

Thema: Token-Authentifizierung ohne IdentityServer skalieren
Am im Forum: Web-Technologien

Hallo zusammen,

was ist der übliche Weg um einen REST-Service mit Token-Authentifizierung zu skalieren?

Ich muss natürlich sicherstellen, dass ein Benutzer mit jedem Backendseitigem Service sprechen kann, egal bei welchem er sich angemeldet hat.

Daher muss das Token von jedem Service für gültig gehalten werden.

Es wird zurzeit kein eigenständiger IdentityServer eingesetzt, sondern eine relativ kleine Bibliothek: ASP.NET.OpenId die in der eigentlichen Applikation sitzt.

Was habe ich nun für Möglichkeiten?

1) Token auf Basis eines festen Zertifikats erstellen. Das Zertifikat bekommt dann jede Instanz des Services und sollte so kompatible Tokens erzeugen
2) Ich habe ansetze mit Redis als "Key-Store" gesehen

Habt ihr Erfahrungen und könntet mich beraten?

Vielen Dank

Thema: Was ist CORS, wie funktioniert es und welchen Vorteil bringt es?
Am im Forum: Web-Technologien

Alles klar, danke für die Erklärung!

Thema: Was ist CORS, wie funktioniert es und welchen Vorteil bringt es?
Am im Forum: Web-Technologien

Das heißt ich schütze die Daten des Servers gegen unerlaubte Browser-Clients?

Ich habe es nicht getestet, aber gehe davon aus, dass ich außerhalb des Browsers die Header ohne Probleme ignorieren kann.

Thema: Was ist CORS, wie funktioniert es und welchen Vorteil bringt es?
Am im Forum: Web-Technologien

Hallo zusammen,

ich bräuchte mal eine Klarstellung bezüglich CORS.

Ich habe bereits einige Erklärungen gelesen, allerdings ist bisher nicht alles klar.

Ausgangspunkt: Frontend und Backend laufen nicht unter der gleichen origin.

Damit die SOP nicht verletzt wird, muss ich nun über die entsprechende CORS-Middlware für ASP.NET Core die richtigen Header setzen lassen.

Somit ist der Zugriff auf das Backend kein Problem.

Aber an welcher Stelle wird nun die Sicherheit erhöht? (Clientseitig, Serverseitig)

Ich würde vermuten, dass damit der Client im Browser geschützt werden soll. Aber unter welchen Bedingungen ist die Sicherheit höher?

Vielen Dank.

Thema: Bei Verbindungsunterbrüchen oder Attachement-Close mit Firebird DB & ASP.NET Core geht nichts mehr
Am im Forum: Datentechnologien

Zitat von Abt
Da es sich vom eigentlichen ADO.NET Kommunikationparadigma unterscheidet, ist es für mich in diesem Sinne schon ein Bug; egal was die andere Seite als Grund darstellt.

Demnach hatte ich mich richtig erinnert, dass dies z.B. beim SQL-Server nicht zu Problemen führt?

Wechsel der Datenbank ist leider keine Option.

Ich werde mal mit der Lifetime der Connections hantieren und im Notfall Richtung eigenem Connection-Pooling testen.

Sehr ärgerlich.

Thema: Bei Verbindungsunterbrüchen oder Attachement-Close mit Firebird DB & ASP.NET Core geht nichts mehr
Am im Forum: Datentechnologien

Ist es denn deiner Meinung nach ein Bug? Da in dem Issue-Tracker von "expected behavior" gesprochen wird.

Wenn ich mich richtig entsinne, passiert mir das mit dem SQL-Server nicht. Allerdings habe ich momentan keinen zum testen.

Kann jemand bestätigen, dass z.B. das neustarten des SQL-Servers mit über Connection-Pooling verbundenem Backend keine Probleme macht?

Thema: Bei Verbindungsunterbrüchen oder Attachement-Close mit Firebird DB & ASP.NET Core geht nichts mehr
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: Firebird

Hallo zusammen,

wir benutzen momentan ein Backend auf ASP.Net Core Basis in zusammenspiel mit Firebird.
Connection-Pooling ist aktiviert. Sollte nun die Datenbank

1) kurzzeitig nicht erreichbar sein
2) ein Attachement über die DB geschlossen werden
3) aus welchen Grund auch immer eine Connection wegbrechen

geht nichts mehr.

Der Grund ist folgender:

Fehler
FirebirdSql.Data.FirebirdClient.FbException: Error reading data from the connection.

Laut diesem Issue, ist das das vorgesehene verhalten: http://tracker.firebirdsql.org/browse/DNET-585?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel

Mir fallen nun nur 2 "Lösungen" ein:

1) Connection-Pooling deaktivieren (würde ich nicht unbedingt als Lösung sehen)
2) Die Exception fangen, den Pool leeren und den SQL erneut absetzen

Beim leeren des Connection-Pools wäre nur die eine Anwendung betroffen und keine anderen.

Habt ihr bessere Ideen?

Danke und Grüße

Thema: Interessante Features aus Kotlin, die sich auch C# gut machen würden
Am im Forum: Rund um die Programmierung

Wenn ich mich recht entsinne, gibt es eine Diskussion unter dem Titel: "Nullable reference types".

https://github.com/dotnet/csharplang/issues/36

https://github.com/dotnet/csharplang/blob/master/proposals/nullable-reference-types.md

Thema: prakt. Erfahrungen mit Standard-Lokalisierung von WinForms-Projekten
Am im Forum: GUI: Windows-Forms

Wir nutzen seit längerem das Mutlilingual App Toolkit für Wpf (WinForms sollte auch kein Problem sein) --> https://marketplace.visualstudio.com/items?itemName=MultilingualAppToolkit.MultilingualAppToolkitv40

Wir schicken dann die standardisierten XLIFF Exporte (falls nötig) an ein Übersetzungsbüro und müssen dann nur die bearbeitete Datei einbinden. Zugriff auf die übersetzten Texte erfolgt dann über die Ressourcen-Dateien.

Auch automatische Übersetzungen sind möglich, aber die bewegen sich meist auf google translator Niveau.

Thema: (gelöst)Wie kann ich den Connectionstring zur Datenbank sicher speichern?
Am im Forum: Datentechnologien

Hallo Abt,

könntest du nochmal genauer erklären inwiefern die Usersecrets helfen?

Ich hatte es so in Erinnerung, dass die Usersecrets im "Benutzer-Ordner" abgelegt werden und so zum Beispiel verhindert wird, dass diese mit eingechecked werden.
Eine Verschlüsselung würde demnach nicht dahinter stecken.

Es ist also eher eine Absicherung während dem Entwicklungsprozess und keine ConnectionString Verschlüsselung für den Relase-Build.

Vielen Dank

Thema: Gibt es Memory-Monitoring für ASP.NET Core?
Am im Forum: Web-Technologien

Alles klar. Vielen Dank für die Informationen!

Thema: Gibt es Memory-Monitoring für ASP.NET Core?
Am im Forum: Web-Technologien

Hallo zusammen,

ich habe bisher perfmon genutzt um .NET Prozesse zu überprüfen. Es geht mir speziell um die GC-Abläufe. Ich habe gelesen, dass die Performancecounter bisher im .NET Core Bereich nicht vorhanden sind. Bedeutet dies, dass somit der perfmon zur Überprüfung rausfällt?
Gibt es alternativen, die ihr empfehlen würdet?

Vielen Dank

Thema: Design für Excel-Files lesen-> Daten aufbereiten -> Update/Insert in DB & Senden einer E-Mail
Am im Forum: Rund um die Programmierung

Hallo zusammen,

ich habe nochmal folgende Anforderung:

Lesen einer Excel-Datei --> Aufbereitung der Daten --> Update/Insert in DB --> Senden einer Status-E-Mail.

Ich habe mir einige Gedanken gemacht und bräuchte nun eure Hilfe.

Hier meine Gedanken:

Typisches Pipeline-Probleme --> Verwendung von TPL-Dataflow
Lesen der Datei außerhalb des "Dataflows"
Post in einen Transformlock für Aufbereitung der Daten
Weitergeben an einen ActionBlock für Update oder Insert

Meine Fragen:

1) Ich würde die einzelnen Datensätze pro Datei in Batchblöcke zusammenfassen und dann im ActionBlock parallel abarbeiten und pro "Batch" nur eine Transaction nutzen.

Wo fange ich an die Blöcke zu bilden? Bereits beim Einlesen der Datei? Dann hätte ich mehrere Posts in den TransformBlock pro Datei. Oder setze ich einen BatchBlock zwischen Transformer und Action? Allerdings müsste ich dann den BatchBlock hin und wieder manuell auslösen, da die Excel-Datei selten genau ein vielfaches der "Max-Size" des BatchBlocks haben wird.

Wie kann ich optimal bestimmten, wenn die Datei vollständig importiert wurde? Durch die Blockbildung wird dies komplizierter.

Oder sollte ich auf die Blockbildung und parallele Verarbeitung pro Datei verzichten?

2) Der ActionBlock ist mit dem Import momentan das letzte Glied im "Dataflow". Wie verfahre ich am besten mit der EMail? Die EMail kann entweder eine Erfolgsmelung oder eine Errormeldung enthalten. Sollte ich hier einen weiteren Block verwenden, oder das Versenden aus dem "Dataflow" herausnehmen? Eine Verarbeitung über eine kleine Warteschlange mithilfe der BlockingCollection wäre ebenfalls eine Möglichkeit.

Ihr seht ich bräuchte Hilfe bei einigen "Design-Entscheidungen".

Ich hoffe ihr könnt mich ein wenig unterstützen.

Vielen Dank

Thema: ASP.NET Core Web Api im Dockercontainer Zugriff auf Appsettings
Am im Forum: Web-Technologien

Danke für eure Hilfe! Ich werde die Umgebungsvariablen nutzen.

Thema: ASP.NET Core Web Api im Dockercontainer Zugriff auf Appsettings
Am im Forum: Web-Technologien

Hallo zusammen,

ich habe mich die letzten Tage mit Docker beschäftigt und hätte eine Frage zu den Appsettings.

Als Beispiel ohne Docker: Ein Pfad (zum Beispiel zu einer Datenbank) ist in den Appsettings gespeichert. Ändert sich der Pfad, ist das kein Problem. Ich ändere entsprechend den Pfad in der Datei und bin fertig.

Bei Docker habe ich jetzt x alternativen alle mit Vor und Nachteilen.

- Umgebungsvariablen nutzen
- Shared-Folder
- Jedesmal ein neues Image erstellen
- ..... vielleicht weitere.....

Wie geht ihr mit dem "Problem" um?

Danke

Thema: WPF Anwendung hat nur unter Windows XP Memory Leaks
Am im Forum: GUI: WPF und XAML

Hier mal reingeguckt? https://support.microsoft.com/en-us/kb/2297328

Thema: Zum Speichern von Einstellungn lieber Ini oder Xml?
Am im Forum: GUI: Windows-Forms

Es ist im JSON Format zwar nicht vorgesehen, aber JSON.Net unterstützt doch zum Beispiel Kommentare.

Thema: FilesystemWatcher nur ein gefeuertes Event verwerten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich hatte anfangs nicht daran gedacht, allerdings dann hinzugefügt.

Funktionieren tut es aber nur, wenn das Hashset static ist. Woran liegt das?
Ohne static befindet sich die variable auf Instanz-Ebene und davon sollte es nur eine geben.

Erzeugt wird diese von Topshelf:


   HostFactory.Run(config =>
            {
                // Pass it to Topshelf
                config.UseSimpleInjector(_container);
                config.UseNLog();

                config.Service<Service>(s => //Service ist die Instanz
                {
                    s.ConstructUsingSimpleInjector();
                    s.WhenStarted((service, control) => service.Start(control));
                    s.WhenStopped((service, control) => service.Stop(control));
                });

                config.RunAsLocalSystem();                            

            });

Thema: FilesystemWatcher nur ein gefeuertes Event verwerten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Das ich das nicht verhindern kann, ist mir bewusst.

Deswegen habe ich versucht, das Problem mit dem Hashset zu umgehen. Allerdings ohne erfolg. Ich bekomme 2 Mal ein true zurück und am Ende ist der Pfad nur einmal drin.

Füge ich die Datei nun ein weiteres Mal hinzu, gibt es keine Probleme. Die events sind einfach zu kurz hintereinander.

Thema: FilesystemWatcher nur ein gefeuertes Event verwerten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Gelöst leider nicht. Ich wollte damit nur sagen, dass mein Problem nicht von den expliziten Eventhandlern kommt.

Absolut letzte Option wäre RX:


var watcher = new FileSystemWatcher("./");

Observable.FromEventPattern<FileSystemEventArgs>(watcher, "Changed")
            .Throttle(new TimeSpan(500000))
            .Subscribe(HandleChangeEvent);

watcher.EnableRaisingEvents = true;

Aber ich füge eine lib natürlich ungern für eine einzige Stelle hinzu.

Edit: Der Code ist aus dem Link

Thema: FilesystemWatcher nur ein gefeuertes Event verwerten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Deabonnieren ist keine Option, da so potentielle andere Dateien übersehen werden.

Die Abfrage des booleschen Wertes müsste aber auf Dateiebene stattfinden. Da andere Dateien natürlich noch verarbeitet werden sollen. Ich denke ich werde hier ebenfalls das Problem haben, dass dies zu langsam ist.
Das Event habe ich nicht explizit abonniert.


 _fileSystemWatcher.Created += FileSystemWatcherOnCreated;

Ich denke mein Problem ist hier erklärt:

FileSystemWatcher Changed event is raised twice

Thema: FilesystemWatcher nur ein gefeuertes Event verwerten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zusammen,

ich habe ein kleines Problem mit dem Verhalten des FilesystemWatchers. Bekanntlich werden für eine Datei die Events häufig mehrfach gefeuert (Es geht nur um das OnCreated).

Ich würde das Event aber gerne nur einmal verarbeiten, bis die Datei wieder von mir "freigegeben" wurde.
Ich habe im Handler ein Hashset erstellt und füge den Pfad hinzu. Sollte das fehlschlagen, würde die eigentliche Aktion nicht ausgelöst werden.


 private HashSet<string> files = new HashSet<string>();

        private void FileCreated(object sender, FilePathEventArgs e)
        {
            try
            {
                if (files.Add(e.FilePath))
                   //aktion();
            }
            catch (Exception ex)
            {
//Test
            }

        }

Die Add Funktion ist natürlich nicht atomar und die Events werden so schnell gefeuert, das die Aktion dennoch 2 Mal ausgeführt wird.

Hat jemand eine andere Idee?

Danke

Thema: Zentrales Verzeichnis für DLLs erstellen, aus dem jedes Programm lesen kann
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Als alternative zu ILMerge wäre noch Costura.Fody zu empfehlen. Du installierst das Nuget-Package und bist fertig. Die kompilierte exe enthält sämtliche Abhängigkeiten und du brauchst die dll's nicht daneben liegen haben.


Wenn du deine Projekt-Datei anpasst:

<Target 
    AfterTargets="AfterBuild;NonWinFodyTarget"
    Name="CleanReferenceCopyLocalPaths" >
     <Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')" />
</Target>


Bekommst du auch noch ein sauberes Output-Directory.

Thema: Aufruf von "Predicate<>" als Parameter einer Funktion
Am im Forum: Grundlagen von C#

Die Verwendung von einem Predicate lässt sich eigentlich sehr gut nachlesen. Ein Predicate ist für gewöhnlich ein delegate vom Typ Func<T,bool>.

Die Frage ist also, wie kann ich einen delegate definieren und an eine Methode übergeben.


   // 1)
            Predicate<string> myFilter2 = delegate (string city) { return city.Contains('A'); };
            CityFilter(myFilter2);

            // 2)
            Predicate<string> myFilter = city => city.Contains('A');
            CityFilter(myFilter);

            // 3)
            CityFilter(city => city.Contains('A'));

Thema: Bester Weg für einen Excel Import über Web Api
Am im Forum: Web-Technologien

Danke nochmal für die ausführliche Hilfe.

Eine Frage ist mir mittlerweile noch gekommen. Wie würdest du unterschiedliche Sprachen handhaben?

Die Services, die die Nachrichten über den Pushservice rausschicken möchten, wissen ja so erstmal nichts von der Client-System-Sprache und immer ist das vielleicht auch nicht möglich. In der Hand des Pushservices sollte dies wohl auch nicht liegen die Nachrichten zu "übersetzen".
Sollte das Übersetzen beim Client liegen, könnten nur standardisierte Nachrichten rausgeschickt werden wie zum Beispiel: "UploadStatusOk" wird zu "Datei erfolgreich hochgeladen" oder eben das ganze auf Englisch.

Ich drehe mich momentan ein wenig im Kreis. Vielleicht hättest du ja nochmal einen Tipp.

Danke

Thema: Cloud Diskussion
Am im Forum: Smalltalk

Vielleicht auch ganz interessant: Microsoft muss E-Mails im Ausland nicht an Regierung geben

Thema: Service für Kommunikation Desktop-Anwendung <--> App
Am im Forum: Netzwerktechnologien

Ich habe es so verstanden, dass die Kommunikation (bzw. der "Kommunikationsstart") in beide Richtungen gehen soll, oder vertue ich mich? Demnach wäre SignalR die bessere Alternative.
Allerdings hat der JavaClient wohl ein paar Fehler und seit längerem wird nichts mehr daran gemacht: https://github.com/SignalR/java-client Aber vielleicht ändert sich das ja mit SignalR3 wieder.

Thema: Video aufzeichnen und speichern mit USB-Cam
Am im Forum: GUI: Windows-Forms

Was auch immer 'video' ist, für mich sieht das so aus, als würdest du der Variabel immer nur ein Bitmap zuweisen?



  void FinalVideo_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {

            if (stopVideo==true)
            {
                2) Erst wenn du das Video stoppst, wird video (1 Bitmap) dem AVIwriter hinzugefügt
                video = (Bitmap)eventArgs.Frame.Clone();
                AVIwriter.Quality = 0;
                AVIwriter.AddFrame(video); //addd new frame to pend video file
            }
            else
            {
    1)            video wird ein Bitmapt zugewiesen
                video = (Bitmap)eventArgs.Frame.Clone();
            }
        }