Wenn deine µC sich per DHCP eine IP holen... kannst du die Informationen evtl. von deinem DHCP Server auslesen?
Eine z.B. Fritzbox hat dazu eine passende API: https://avm.de/service/schnittstellen/
Gibt auch hier im Forum jemanden, der eine passende Bibliothek geschrieben hat, ob die die notwendige Heimnetzgeräte API implementiert kann ich dir aber nicht sagen.
Intern erstellt der Compiler aus jedem await eine Statemachine.
Da gibt es sicher einige Blog Posts oder Artikel darüber, wie das genau funktioniert.
Für dich erscheint es aber so, dass das warten auf eine async Methode (await) dazu führt, dass diese im Hintergrund ausgeführt wird und der Verarbeitungsschritt dann an den Rückgabepunkt zurückspringt.
Insofern ist es wunderbar möglich await's untereinander zu schreiben.
In diesem Beispiel, bei AddCustomerToDb: Wenn der Task "AddCustomerToDb" abgearbeitet ist, springt die Ausführung wieder zu dieser Zeile und die variable customer steht zur verfügung. Danach wird "AddCustomerAddress" abgearbeitet.
Also für den Programmierer kein Unterschied zu sequentieller Programmierung.
Je nachdem, was du genau machen möchtest gibt es unterschiedliche Herangehensweisen an das Problem. Angefangen von kompletten Frameworks, die dir die Arbeit abnehmen über Mediation (CQRS via MediatR) bis hin zu simplem ausprogrammieren der Abhängigkeiten.
Was passt hängt davon ab, wie deine Anforderungen aussehen.
Dein Beispielcode sieht aber nach Schichtenverletzung aus. Datenbankzugriff sollte nicht in der Datenbank erfolgen.
P.S.: ist mir erst am Ende aufgefallen... willst du nur mehrere await's in einer Methode ausführen? Das funktioniert doch Problemlos..
Pseudo Code:
public async Task AddCustomer()
{
var customer = await AddCustomerToDb();
await AddCustomerAddress(customer, address);
await AddCustomerToProject(customer, 1);
}
Nur, damit es hier steht: Für VSCode muss kein Nutzerkonto angelegt werden.
Es gibt Features, die mit einem Nutzerkonto besser funktionieren (z.B. LiveShare, Azure Integration oder GitHub Integration), aber dafür kann es z.B. auch ein u.U. GitHub Konto sein. Für das reguläre erstellen, ausführen und debuggen von Programmen auf Basis von .NET 5 wird aber kein Konto benötigt.
Zu VSCode allerdings noch ein Satz:
Man fängt beim Programmieren gerne mit Konsolenanwendungen an, auf die man Abfragen legt. Das funktioniert mit einem Standardprojekt von VSCode nicht und man muss es erst so konfigurieren, dass eine eigenständige Konsole geöffnet wird.
ihr könnt problemlos Visual Studio Code einsetzen und damit Webservices auf Basis von ASP.NET Core (bzw. auf .NET 5.0 Basis) erstellen.
Allerdings kann Visual Studio Code nicht mit den Desktop Frameworks WPF und Windows Forms umgehen.
Wenn die dll's Modbus RTU mit einer Steuerung spricht könntest du auch eine in C# geschriebene komplett managed Implementierung vn Modbus nutzen um die Modbus Transaktionen durchzuführen.
vermutlich ist es einfacher als du denkst.
Hast du die DLL nur auf der Festplatte vorliegen oder ist diese über einen Paketmanager (NuGet im .NET Umfeld) verfügbar?
Falls nur auf Festplatte:
Füge deinem Projekt einfach einen Verweis auf die .dll hinzu. Am sinnvollsten legst du sie in dein Projektverzeichnis mit hinein/in einen Unterordner.
Es gibt da zur Projektstrukturierung einige passende Informationen in der offiziellen .NET Dokumentation.
Wenn sie über NuGet verfügbar ist, binde sie darüber ein.
Deine Methode "PrepareMailsAsync" heißt zwar Async und ist als Async markiert, ist aber nicht async und gibt vor allem keinen Task zurück. Sollte also in jedem Fall einen Compiler Fehler geben, weil der Rückgabetyp nicht stimmt.
Ich kann dir Argumentation verstehen, aber auch zwei sich überwachende Services verschieben das Problem ja nur, wenn du der Authorisierung nicht traust.
Denn auch zwei Services kann ich nahezu gleichzeitig mit Adminrechten beenden.
Es bleibt dir also nur entweder auf die Authorisierung zu vertrauen oder ein Workaround zu bauen, um den du vermutlich wieder einen Workaround bauen musst.
Ein beenden über den Task Manager wirst du kaum abfangen können.
Ob es durch Windows Verwaltung, oder ob es einen Windows Hook gibt, der beim beenden eines Prozesses ausgelöst wird.
Was glaube ich ganz gängig ist wäre ein zweites Programm, welches parallel läuft. Deine beiden Programme müssten sich dann gegenseitig überwachen.
Vermutlich ist es aber sinnvoller bei passender Authorisierung anzusetzen. Ohne Adminrechte kann ein User einen als Admin gestarteten Prozess nicht beenden.
Richtig, der Webservice sollte nicht auf dem Client PC / Handy liegen.
Er muss aber nicht auf dem gleichen Server liegen wie die Datenbank.
In deinem Fall sollte er auf dem RPI liegen, er kann (aber muss nicht) in PHP geschrieben sein. Du könntest dort auch einen ASP.NET Core Web API hinlegen - geschrieben in C#.
Natürlich ist es schwierig zu sagen wo die Grenze zu ziehen ist.
Ob das in gleichem Maße für Kunst gilt kann und will ich nicht beurteilen - auch gerade, weil es mich nicht betrifft, da überlasse ich das Urteil besser anderen.
Was ich aber als Gute Analogie befunden habe ist das (m/w/d) an Stellenausschreibungen. Mir persönlich ist es nicht wichtig, geradezu egal ob da dieses d dransteht. Aber es fühlten sich dadurch Menschen diskriminiert. Deswegen ist es dort hineingekommen.
Die gleiche Diskussion ist wegen des Master Branches oder ähnlichen Begriffen in der Technologiewelt.
Ins blaue geschossen: Dir wird die Ausgabe der "ToString()" Method angezeigt.
Dein Binding benötigt noch einen Path, um eine bestimmte Property anzuzeigen.
So Pauschal würde ich das nicht ablehnen... Azure Key Vault z.B. ist auch eine HTTP Schnittstelle um an Credentials zu kommen, die dort gespeichert sind.
Entschuldigt, dass ich soviel Quote, ich wollte das aber nicht unkommentiert stehen lassen.
Zitat von M.L.
Die Logindaten lassen sich auch in eine externe .cs Datei eintragen (analog wie .inc bei PHP)
Das ist nicht analog wie bei PHP.
Der Unterschied: c# wird kompiliert und alle *.cs Dateien innerhalb eines Projektes als IL Code in einer .dll (oder .exe oder bin) zusammengefasst.
In der analogie zu PHP wäre hier eine Konfigurationsdatei, die vom Code gelesen wird (analog zu require_once in PHP). Prinzipiell sind die Vergleiche aber etwas mühsam, weil PHP und C# sehr unterschiedlich funktionieren!
Zitat von hypersurf
(dafür bietet .NET auch schon entsprechende Klassen).
Ich würde in jedem Fall das Konfigurationsmodell von .NET Core empfehlen: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1
Das ermöglicht sowohl verschlüsselte Quellen für Zugangsdaten, Authentifizierte und Lokale. Damit hat man die beste Flexibilität.
Das funktioniert auch für Desktop (WPF/WinForms) Apps. Allerdings führt das quasi jeden Login Mechanismus ad absurdum, wenn nicht der Login der gleiche wie für die Datenbank ist.
Auch muss immer Hinterfragt werden, ob ein Desktop Programm direkt auf eine Datenbank zugreifen sollte!
@Lucius:
Am besten wäre es, du arbeitest dich in die Grundlagen von der nicht mehr ganz so neuen C# Welt in Form von .NET Core (bzw. jetzt kommend .NET 5) ein.
Da werden viele dieser Frage mit gut funktionierenden Konzepten beantwortet.
Vergleich mal die Projekte, da werden noch mehr Unterschiede sein.
Das liegt ja nicht an der IDE (zumindest nicht die Fehler), sondern nur daran, dass das Template im SharpDevelop einfach nicht die richtigen Referenzen enthält.
Warum nutzt du nicht Visual Studio Code mit ASP.NET Core?
Okay, mit MS Dynamics habe ich noch nicht gearbeitet.
Ich kann mir aber fast nicht vorstellen, dass du bei dem OData Context nicht einen HttpClientHandler oder was ähnliches mitgeben kannst.
wenn du sagst du erzeugst deine Proxies selber auf Basis der Metadaten, wirst du ja in den Proxies eien HttpClient verwenden.
Dieser behandelt deinen Http Request auf deine OData API. Hier solltest du auch an die Fehlerbeschreibung kommen.
Ohne das jemals mit ASP.NET gemacht zu haben, einfach mal frei heraus mit meinem Halbwissen :).
In deinen Settings ist der ResponseType nicht gesetzt. Würdest du den auf "code" bzw auf OpenIdConnectResponseType.Code setzt, sollte das AAD mit der passenden Antwort um die Ecke kommen.
das ist leider echt schlecht vergleichbar. Bei der Cosmos DB bezahlst du ja nicht für expliziten RAM oder eine CPU, sondern für Request Units.
Auch ist ein Vergleich mit nur einem enthaltenen Dokument denkbar schlecht, du bezahlst die Cosmos DB glaube ich in vollen GB.
Ob es im Produktiven Anwendungsfall lohnt muss glaube ich dabei sehr genau angeschaut werden können. Ich muss dann ehrlich gestehen, dass ich nicht weiß inwie weit MongoDB Atlas Feature-gleich mit der Managed Cosmos DB ist.
Im Endeffekt sitzen ja dort bei MS Produktmanager, die sehr genau im Markt vergleichen werden, was für solche Datenbanken für Preise ausgerufen werden können.
SSH bietet sich idr. nicht zum monitoren von Switchen an. Genau dafür gibt es das Protokoll SNMP.
Wir verwenden hier die Lextm.SharpSnmpLib sehr erfolgreich in der freien Version. Zusammen mit den Python tools "pysmi" unter Linux lassen sich da sehr elegant auch die MIB Files auslesen und die entsprechenden Datenpunkte (Object ID's) bestimmen.
Edit: pysmi eingefügt, sonst machte der Satz keinen Sinn