Abhängigkeiten

Projekt-Abhängigkeiten, Azure-Dienste, externe Systeme und architekturkritische Kopplungen.

Plattform

  • net10.0 in allen Projekten, ImplicitUsings und Nullable aktiv.
  • Azure Functions v4, Isolated Worker, OutputType=Exe.
  • Tests auf xUnit v3 mit Microsoft Testing Platform. Aufruf mit dotnet test --project …; das Positionsargument funktioniert nicht mehr.

Projekte

flowchart LR
    HOST["DataBridge (Host)"] --> CORE["DataBridge.Core"]
    DLM["DeadLetterMover"] --> CORE
    TEST["DataBridge.Test"] --> CORE
    TEST --> HOST

NuGet-Pakete

Die Versionen werden zentral in src/Directory.Packages.props gepflegt (Central Package Management); die .csproj-Dateien referenzieren Pakete nur noch ohne Version. Ein Update passiert also an genau einer Stelle.

Sicherheitsprüfung beim Build: Directory.Packages.props aktiviert NuGet Audit für alle Projekte, inklusive transitiver Pakete, und meldet Treffer jeder Schwere. Ab „moderate“ (NU1902–NU1904) gelten sie als Fehler, „low“ (NU1901) bleibt eine Warnung — solche Lücken betreffen oft Funktionen, die gar nicht genutzt werden, und sollen kein Release blockieren. Ein Paket mit einer Sicherheitslücke ab „moderate“ lässt damit Restore und Build lokal, im Dockerfile und in der Pipeline scheitern. Abhilfe ist ein Update der betroffenen Version; liegt die Lücke in einem transitiven Paket, dieses mit eigener Version in Directory.Packages.props aufnehmen. Weil neue Advisories jederzeit erscheinen, kann ein bisher grüner Stand ohne Code-Änderung rot werden. Ist der Advisory-Feed nicht erreichbar, bleibt es bei der Warnung NU1900, offline bauen funktioniert also weiter.

Hier nur die Rolle der wichtigsten Pakete:

PaketProjektRolle
Microsoft.Azure.Functions.Worker.*HostRuntime, HTTP/ASP.NET-Core-, Service-Bus-, Timer-, Storage-, Durable-Extensions
Microsoft.ApplicationInsights.WorkerService, Microsoft.ApplicationInsightsHost, CoreTelemetrie. Pin auf 2.23.0, weil 3.x ITelemetryProcessor entfernt hat
ModelContextProtocol.AspNetCoreHostMCP-Server
ModelContextProtocol.CoreCorenur McpException, damit Tool-Fehlerursachen den MCP-Client erreichen
Azure.Data.TablesCoreTable Storage
Azure.Messaging.ServiceBusCoreQueues, Queue-Laufzeitdaten
Azure.Identity, Azure.Security.KeyVault.SecretsCoreDefaultAzureCredential, optionaler Key-Vault-Bezug
Microsoft.PowerPlatform.Dataverse.ClientCoreCE-Connector
Microsoft.PowerPlatform.Dataverse.Client.AzAuthCoreCE-Connector, Managed Identity
Microsoft.OData.Edm, Microsoft.OData.CoreCore, HostEDM-Metadaten für BC/NAV
Microsoft.OpenApi, Microsoft.OpenApi.YamlReaderCoreOpenAPI-Connector
Microsoft.Data.SqlClient, Npgsql, MySql.Data, Oracle.ManagedDataAccess.CoreCoreSQL-Connectoren
NCrontab.SignedCoreCron-Auswertung mit Sekundenfeld
Newtonsoft.JsonalleSerialisierung von QueueMessage und Konfigurations-JSON
System.Linq.AsyncCoreIAsyncEnumerable beim seitenweisen Abruf

Alle DB-Treiber werden immer mitgeladen, auch wenn nur ein Teil genutzt wird.

Azure-Dienste

DienstVerwendungKritikalität
Azure Functions / App Service PlanAusführungkritisch
Azure Service Bus (Basic)Messaging zwischen Erkennung und Verarbeitungkritisch
Azure Table StorageKonfiguration und Watermarkskritisch
Azure Blob/File/Queue StorageFunctions-Runtime, Content Share, Durable-Statekritisch
Application InsightsTelemetriehoch
Grafana-Dashboard (Azure Managed)Betriebsdashboardoptional
Azure Key Vaultoptionaler Secret-Bezug der Connectoren, nicht deploytoptional

Externe Systeme

SystemProtokoll / SDKLesenSchreiben
D365 Business CentralOData v4, OAuth2 / Basic / Managed Identityjaja
D365 CE / DataverseServiceClient (Connection-String oder Managed Identity über AzAuth), Change Trackingjaja
D365 NAVOData, OAuth2 / Basicjaja
REST-API mit OpenAPI-SpezifikationHTTP, API-Key / OAuth2 / Basicjaja
MSSQL, PostgreSQL, MySQL, OracleADO.NETjanein

Architekturkritische Kopplungen

AbhängigkeitRisiko
Service Bus BasicKeine Topics, Sessions, Partitionierung, Duplicate Detection
Table Storage als Konfig-StoreFehlkonfiguration wirkt global; Prüfung nur über CheckListService und JobService.Initialize
Dataverse-SDK-VersionEnge Kopplung des CE-Connectors
NCrontab.SignedBestimmt die Scheduling-Semantik
Eigener BufferingLoggerProviderDiagnose hängt am Custom-Sampling; AI-Standardprovider ist abgeschaltet
Newtonsoft.JsonVerbindliches Wire-Format der Nachrichten
String-Typisierung der NachrichtenJeder Resolver parst selbst inkl. Locale; Quelle von Kulturproblemen zwischen Systemen