Laden...

Forenbeiträge von TotalerASPNETN00B Ingesamt 20 Beiträge

30.11.2021 - 21:05 Uhr

Kann dir Prüfung auf gleiche Id bereits im Controller erfolgen od. dauert auch das schon zu lange?

Es kann unterumständen zu lange dauern. Aber ein theoretischer Fall macht mir Kopfzerbrechen, was passiert wenn ein Vorgang (wie z.b eine Verarbeitung) im BS noch nicht abgeschlossen ist und in der Zwischenzeit ein weiterer Vorgang gestartet wird ? Wie handhabt das der BS ?

25.11.2021 - 17:40 Uhr

Ich prüfe anhand der Id ob es bereits einen gleichen Eintrag in der DB gibt ansonsten update ich und arbeite so die Queue nach und nach ab

25.11.2021 - 17:03 Uhr

wenn etwas in der Datenbank schief ging (damit er den Vorgang wiederholt)
Brauchst du dazu einen BackgroundService od. kann das direkt im Controller, etc. zur DB geschickt werden? Das würde die Komplexität der Anwendung reduzieren -- und auch potentielle Probleme wie du hier siehst. Wenns direkt im Controller passiert, so ist das im Vordergrund und es kann direkt dem Benutzer einen Meldung angzeigt werden od. bei einem HTTP-API ein entprechender Statuscode + Meldung.

Ja die Zeit ist das Problem ohne Background servicedauert es zu teil sehr lang 10 sekunden und mehr, daher sammle ich die "Sachen" die ich bekommen hab in einer Queue und verarbeite diese dann im nachhinein dann dauert eine http Antwort nur 0.15 sekunden zirka, was halt extrem cool ist.

Und es klappt halt ansich gut, wenn es eben nicht zu einem Fehler kommt z.b in der DB.

Wie kann man denn in einer BS mit Cuncurrency Issues umgehen ?

25.11.2021 - 16:38 Uhr

Aufgrund deiner Aussage nehme ich an, dass der BS sein Arbeitsaufgaben vom Frontend / User bekommt und diese dann im Hintergrund abarbeiten soll, also eine Art "Queue-Processor". Hier sollte aber bereits im Frontend die Eingaben validiert werden, so dass im BS nur echte Fehler auftreten können (wie z.B. Fehler beim Zugriff auf die Datenbank) und keine vom Benutzer verursachten. Daher ist es auch nicht recht sinnvoll den Benutzer über diese Art der Fehler zu informieren.

Hallo, auch dir danke für dein Feedback,

Ja genau möchte, halt den User imformieren wenn etwas in der Datenbank schief ging (damit er den Vorgang wiederholt). Aber das mit dem logging ist eine sehr gute Idee

24.11.2021 - 19:05 Uhr

Er erklärt ja auch in seinem Beitrag wieso das so gewollt ist - und was man machen muss.
Die Lösung hast Du also in seinem Beitrag.

Aber ich bin verunsichert, ob das so richtig ist

24.11.2021 - 18:52 Uhr

Also da hab ich das gelesen aber ich dachte es bezieht sich auf alle Probleme BackgroundService Gotcha: Silent Failures

24.11.2021 - 18:39 Uhr

Ich meine Exceptions in BackgroundService. War vielleicht ungünstig formuliert.
Aber funktionieren im BackgroundService try/catch/finally Blöcke ?

24.11.2021 - 16:34 Uhr

Was möchtest du denn mit den Exceptions erreichen?

Ich möchte u.a. dem User mitteilen wenn etwas nicht so lief wie gewünscht

24.11.2021 - 15:18 Uhr

Hallo Community,

Ich hoffe die Kategorie ist richtig gewählt 😉

Ich habe eine Frage zu dem BackgroundService ich habe merhfach gelesen das man keine Exceptions werfen kann (in .Net 5), stimmt das ? Falls ja, gilt dies nur für die Methoden wie ExecuteAsync usw. oder für alle Methoden (oder auch zusätzliche selbstgeschriebene Hilfsmethoden) innhalb der Klasse ?

Und gibt es "gute" alternativen zu Exceptions in BackgroundService "Kontext" ?

Hat da jemand praktische Erfahrungen mit Exceptions im BackgroundService Bereich ?

18.11.2021 - 16:42 Uhr

Du kannst die Verarbeitung mit der Datenbank bspw. einfach in einem IHostedService auslagern mit einem
>
mit diesem kommunizieren.

Hallo, und vielen dank für deine Rückmeldung 🙂

Ich dachte auch an so etwas wie einen Backroundworker o.ä.
Aber ist der Vorschlag von dir auch auch Threadsafe ? Also das wenn der Vorgang nicht abergeschlossen ist und wärenddessen eine weitere Speicheranfrage kommt, das dieser nicht blockert wird oder so.

18.11.2021 - 11:53 Uhr

Hallo liebe Community,

ich hab folgende Problem was mir den Kopf zermartert.

Ich hab mit Hilfe des MS Graph SDK einen Notification Service (in ASP .Net Core) gecoded, der bei mir bei Ändernungen im OneDrive eine Mitteilung ausgibt (Delta-Anfragen) was geändert wurde , das klappt auch alles ganz gut.

Nun hab ich eine Posgresql Datenbank "dazu geschaltet" ,dort werden mit Hilfe des Entity Core Framework Informationen zu den Dateien (also das was in einer Delta-Anfrage steht) reingeschrieben, was auch klappt.

Jetzt ist das Problem das dieser ganze Vorgang mehrere Sekunden dauern kann, was aber zu Folge hat, wenn es mehr als 3 Sekunden dauert, das ich mehrere Benachrichtigungen hintereinander bekommen kann, was doof ist. Stichwort: Enschränkungen

Anmerkung: ohne Datenbank würde es unter 1 Sekunde dauern. Gemessen wurde die Zeiten mit Stopwatch

Ich müsste bevor ich alles verarbeite einen 2xx Statuscode (wie Ok oder Accepted) zurückgeben.

Kann man einen Statuscode vor der eigentlichen Verarbeitung abschicken ? So das es erst danach verarbeitet wird ?

Habt ihr ein paar theoretische Ansätze die mir weiterhelfen könnten ?

Über konstruktive Ansätze würde ich mich sehr freuen 🙂

26.08.2021 - 15:57 Uhr

Ob es ein Muss ist, sei dahingestellt. Auf jeden Fall gibt es neuere Ansätze, z.B. TypeScript (typisiertes JavaScript), Angular, Vue.JS, Aurelia, React (bekanntere JS-Frameworks)

Hallo,

alles schön 🙂 aber das Front-End ist in Python, leider

26.08.2021 - 13:02 Uhr

Und dann gibts da noch so ne große Suchmaschine, die einem helfen kann 🙂
>

Ja es gibt nette Python Libs, keine Frage, die scheine aber zum Teil älter zu sein 😉

26.08.2021 - 12:49 Uhr

Aber die Client-Benachrichtigung kannst Du aber in allen Fällen über WebSockets machen.
Und als fertiges Framework gibts dazu zB SignalR und als fertigen Service gibts dazu zB Azure SignalR.

Ok, ich hab Videos zu SingalR gefunden ,die waren aber schon älter, dort wurde erklärt das dass Fron-End in JavaScript geschrieben sein muss, stimmt das eigentlich (noch) ?! Oder ist es egal in welcher Programmiersprache das Front-End geschrieben ist ?!

26.08.2021 - 12:32 Uhr

Zum Thema:
SignalR bzw. WebSockets (mit SignalR) ist der in .NET übliche Weg, um Clients zu benachrichtigen.
WebHooks haben einen anderen Zweck als die aktive Benachrichtigung von Clients.

Hallo,

vielleicht muss ich es genauer beschreiben. Ich wollte einen Mechanismus der mich benachrichtigt das es Änderungen in Azure gab, dies machte ich nach diesen Übungen und diese realisiert Microsoft als Webhook. Jetzt bekomme ich in der Konsole Ressourcen-Änderungen angezeigt was gut ist. Jetzt will ich diesen Webhook "ausbauen" und von der reinen Konsolenanwendung weg und den Service mehreren Usern zur Verfügung stellen und jeder User des Front-Ends andere Wünsche hat, muss ich die irgendwie managen, also so ist mein Gedanke.

26.08.2021 - 11:55 Uhr

Also den Webhook-Service selbst will ich nicht verändern der funktioniert einwandfrei, ich will halt nur die "personalisierten" Benachrichtigungen(JSON´s) an die n Clients schicken. Pub/Sub Muster klingt schon sinnvoll.

26.08.2021 - 11:40 Uhr

Guten Morgen,

vielen dank für die sehr schnelle Rückmeldung 🙂

Ein Kumpel meinte es wäre besser das mit SignalR zu machen aber mein Front-End nutzt für die Logik ausschließlich (Python 3.x). Woanders bekam ich den Vorschlag es mit SSE, Websockets zu machen ich bin irgendwie erschlagen 😉

Ein Lehrer meinte das Observer und Pub-Sub Pattern ansich das gleiche wären, wie stehst Du dazu ?

26.08.2021 - 11:16 Uhr

Hallo liebe Community,

Ich habe mir mit ASP Net Core v5.0.0 (C#) einen WebHook Daemon Service gebaut der auch soweit als Konsolenanwendung funktioniert. Jetzt möchte ich diesen erweitern, es sollen sich beliebig viele User (aber mit mehr als 50) mit einem bestimmten Front-End (in Python) mit dem Service verbinden können, jeder User hat aber eigene Filter Optionen und dadurch bekommt jeder User auch andere Ergebnisse von dem WebHook.

Mein erster aber (naiv ineffiziente) Gedanke, war jede Anfrage samt Anfrage Adresse in eine Datenbank (In Memory-DB ?!) zu speichern und diese Anfragen dann nach und nach abzuarbeiten und diese dann an die Front-End(s) zu schicken. Aber das ist aber eher unschön.

Hat jemand andere (bessere) Vorschläge ? 😉

Über freundliche Tipps würde ich mich sehr freuen

03.08.2021 - 16:23 Uhr

Hallo danke für die Rückmeldung,

die Klasse wurde selbst angelegt (also nicht von mir)
Es wundert mich das bei einer so einer Art von Klasse so Sachen fehlen^^
und nachdem ich das fehlende Using hinzugefugt habe bekomme ich einen Compiler Error CS0029

Fehlermeldung:
Fehler CS0029 Der Typ "Microsoft.IdentityModel.Tokens.TokenValidationParameters" kann nicht implizit in "System.IdentityModel.Tokens.TokenValidationParameters" konvertiert werden.

ich habe dabei ein ungutes gefühl wenn ich eine vorgefertigte Klasse ändere.

und wenn ich alles in ASP Net Core neu erstelle kann ich auch die Packete von NuGet nutzen ?

03.08.2021 - 15:56 Uhr

Hallo liebe Community,

dies ist mein erstes Thema in diesem Forum 🙂

ich möchte gerne einen Webhook für Sharepoint coden, und habe mir auf den Seiten von Microsoft die Sachen mit Webhooks durchgelesen https://docs.microsoft.com/de-de/sharepoint/dev/apis/webhooks/get-started-webhooks (Docs)

Aber nachdem ich ein "leeres" ASP Net (mit .Net Framework 4.5) bei Azure registiert hab und die empfohlenen Abhängigkeiten hinzugefügt hab bekomme ich bei TokenValidationParameters einen Compiler Fehler CS0246

Fehlermeldung:
Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
Fehler CS0246 Der Typ- oder Namespacename "TokenValidationParameters" wurde nicht gefunden (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis). WebApplication C:\Users\User\source\repos\WebApplication\WebApplication\App_Start\Startup.Auth.cs 22 Aktiv

Die "Problem" Klasse


using System;
using System.Collections.Generic;
using System.Configuration;
using System.IdentityModel;
using Microsoft.IdentityModel;
using System.Linq; 
using Microsoft.Owin.Security;
using Microsoft.Owin.Security.ActiveDirectory;
using Owin;

namespace WebApplication
{
    public partial class Startup
    {
        public void ConfigureAuth(IAppBuilder app)
        {
            app.UseWindowsAzureActiveDirectoryBearerAuthentication(
                new WindowsAzureActiveDirectoryBearerAuthenticationOptions
                {
                    Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
                    TokenValidationParameters = new TokenValidationParameters {
                         ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
                    },
                });
        }
    }
}


und die packages config


<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Antlr" version="3.5.0.2" targetFramework="net45" />
  <package id="AppForSharePointOnlineWebToolkit" version="3.1.2" targetFramework="net45" />
  <package id="AppForSharePointWebToolkit" version="3.1.5" targetFramework="net45" />
  <package id="bootstrap" version="3.4.1" targetFramework="net45" />
  <package id="EntityFramework" version="6.1.3" targetFramework="net45" />
  <package id="jQuery" version="3.4.1" targetFramework="net45" />
  <package id="Microsoft.AspNet.Mvc" version="5.2.7" targetFramework="net45" />
  <package id="Microsoft.AspNet.Mvc.de" version="5.2.7" targetFramework="net45" />
  <package id="Microsoft.AspNet.Razor" version="3.2.7" targetFramework="net45" />
  <package id="Microsoft.AspNet.Razor.de" version="3.2.7" targetFramework="net45" />
  <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net45" />
  <package id="Microsoft.AspNet.Web.Optimization.de" version="1.1.3" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi" version="5.2.7" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.Client" version="5.2.7" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.Client.de" version="5.2.7" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.2.7" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.Core.de" version="5.2.7" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.HelpPage" version="5.2.7" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.Tracing" version="5.2.7" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.7" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.WebHost.de" version="5.2.7" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebPages" version="3.2.7" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebPages.de" version="3.2.7" targetFramework="net45" />
  <package id="Microsoft.Azure.ActiveDirectory.GraphClient" version="2.1.0" targetFramework="net45" />
  <package id="Microsoft.Azure.KeyVault.Core" version="1.0.0" targetFramework="net45" />
  <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="2.0.1" targetFramework="net45" />
  <package id="Microsoft.Data.Edm" version="5.8.4" targetFramework="net45" />
  <package id="Microsoft.Data.OData" version="5.8.4" targetFramework="net45" />
  <package id="Microsoft.Data.Services.Client" version="5.8.4" targetFramework="net45" />
  <package id="Microsoft.IdentityModel.JsonWebTokens" version="6.12.0" targetFramework="net45" />
  <package id="Microsoft.IdentityModel.Logging" version="6.12.0" targetFramework="net45" />
  <package id="Microsoft.IdentityModel.Protocol.Extensions" version="1.0.4.403061554" targetFramework="net45" />
  <package id="Microsoft.IdentityModel.Protocols" version="5.5.0" targetFramework="net45" />
  <package id="Microsoft.IdentityModel.Protocols.WsFederation" version="5.5.0" targetFramework="net45" />
  <package id="Microsoft.IdentityModel.Tokens" version="6.12.0" targetFramework="net45" />
  <package id="Microsoft.IdentityModel.Tokens.Saml" version="5.5.0" targetFramework="net45" />
  <package id="Microsoft.IdentityModel.Xml" version="5.5.0" targetFramework="net45" />
  <package id="Microsoft.Owin" version="4.2.0" targetFramework="net45" />
  <package id="Microsoft.Owin.de" version="4.2.0" targetFramework="net45" />
  <package id="Microsoft.Owin.Host.SystemWeb" version="4.0.1" targetFramework="net45" />
  <package id="Microsoft.Owin.Host.SystemWeb.de" version="4.0.1" targetFramework="net45" />
  <package id="Microsoft.Owin.Security" version="4.2.0" targetFramework="net45" />
  <package id="Microsoft.Owin.Security.ActiveDirectory" version="3.1.0" targetFramework="net45" />
  <package id="Microsoft.Owin.Security.ActiveDirectory.de" version="3.1.0" targetFramework="net45" />
  <package id="Microsoft.Owin.Security.de" version="4.2.0" targetFramework="net45" />
  <package id="Microsoft.Owin.Security.Jwt" version="3.1.0" targetFramework="net45" />
  <package id="Microsoft.Owin.Security.Jwt.de" version="3.1.0" targetFramework="net45" />
  <package id="Microsoft.Owin.Security.OAuth" version="4.2.0" targetFramework="net45" />
  <package id="Microsoft.SharePointOnline.CSOM" version="16.1.5521.1200" targetFramework="net45" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
  <package id="Microsoft.WindowsAzure.ConfigurationManager" version="3.2.3" targetFramework="net45" />
  <package id="Modernizr" version="2.8.3" targetFramework="net45" />
  <package id="Newtonsoft.Json" version="10.0.2" targetFramework="net45" />
  <package id="Owin" version="1.0" targetFramework="net45" />
  <package id="SharePointPnPCoreOnline" version="2.6.1608.0" targetFramework="net45" />
  <package id="System.IdentityModel.Tokens.Jwt" version="4.0.4.403061554" targetFramework="net45" />
  <package id="System.Spatial" version="5.8.4" targetFramework="net45" />
  <package id="WebGrease" version="1.6.0" targetFramework="net45" />
  <package id="WindowsAzure.Storage" version="9.3.3" targetFramework="net45" />
</packages>

Über Hilfe würde ich mich sehr freuen 🙂