Einreichungen versenden mit dem FIT‑Connect .NET SDK
Diese Dokumentation beschreibt, wie Sie Submissions (Einreichungen) versenden und bei Bedarf die richtige Destination ID über den Routing-Service ermitteln.
1. Voraussetzungen
- Konfiguration: Eine
appsettings.jsonmit gültigenSender.ClientIdundSender.ClientSecret(siehe Konfiguration). - Ziele: Eine
Destination ID. Diese kann statisch bekannt sein oder dynamisch über den Routing-Service ermittelt werden.
2. Client initialisieren
Das SDK wird über Dependency Injection eingebunden. Erstellen Sie zunächst einen IFitConnectClient:
using Fitko.FitConnect.Sdk.Client;
using Fitko.FitConnect.Sdk.DependencyInjection;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
var client = new ServiceCollection()
.AddSingleton<IConfiguration>(configuration)
.AddFitConnect()
.BuildServiceProvider()
.GetRequiredService<IFitConnectClient>();
In einer ASP.NET Core- oder Generic-Host-Anwendung injizieren Sie IFitConnectClient direkt per Konstruktor-Injektion, nachdem Sie AddFitConnect() in Program.cs registriert haben.
3. Destination ID finden (Routing Service)
Falls Ihnen die Destination ID nicht vorliegt, nutzen Sie den RouteService. Dieser ermöglicht die Suche anhand des Leistungsschlüssels (Service-Typ) und eines regionalen Identifikators (AGS, ARS oder Area ID).
Hinweis: Laut SDK-Validierung muss exakt einer der regionalen Parameter (
ags,arsoderareaId) angegeben werden.
// Suche nach AGS (Amtlicher Gemeindeschlüssel)
var routes = await Task.Run(() => client.RouteService.FindDestinationId(
leikaKey: "urn:de:fim:leika:leistung:99400048079000",
ags: "08111000" // Beispiel für Stuttgart
));
// Die Destination ID des ersten Treffers extrahieren
var destinationId = routes.FirstOrDefault()?.DestinationId;
if (destinationId == null)
{
throw new Exception("Keine passende Destination für die angegebenen Kriterien gefunden.");
}
4. Standard-Versand (Empfohlen)
Der SubmissionRequestBuilder übernimmt die Validierung und Verschlüsselung automatisch.
using Fitko.FitConnect.Sdk.Models.Attachments;
using Fitko.FitConnect.Sdk.Services.Sender;
// Submission aufbauen (unter Verwendung der ermittelten destinationId)
var request = SubmissionRequestBuilder.Builder()
.WithDestinationId(destinationId)
.WithServiceType("urn:de:fim:leika:leistung:99400048079000", "Name des Dienstes")
.WithMetadataVersion(new Version(1, 5, 0))
.WithJsonData("""{ "firstName": "Ada", "lastName": "Lovelace" }""", new Uri("https://schema.fitko.de/schema.json"))
.WithAttachment(Attachment.FromFile("./file.pdf", "application/pdf"), false)
.Build();
// Senden
var result = await client.SenderService.SendSubmission(request);
Console.WriteLine($"Gesendet! SubmissionId: {result.SubmissionId}, CaseId: {result.CaseId}");
5. Erweiterte Optionen
Suche nach Gebieten (Areas)
Wenn Sie die areaId nicht kennen, können Sie mit Suchbegriffen nach Gebieten suchen:
var areas = client.RouteService.FindAreas(new List<string> { "Stuttgart" });
Große Anhänge (Chunking)
Das SDK kann große Anhänge automatisch in kleinere Fragmente aufteilen, um API-Limits für Request-Größen zu überwinden.
Chunking aktivieren
Chunking wird per Anhang durch den zweiten Parameter aktiviert:
.WithAttachment(Attachment.FromFile("./large-file.zip", "application/zip"), true) // true = Chunking aktiv
Wie Chunking funktioniert
- Der Sender fragmentiert den Anhang in mehrere Teile (Chunk-Größe konfigurierbar)
- Die Fragmente werden nacheinander übertragen
- Der Receiver setzt die Fragmente wieder zu einem logischen Anhang zusammen
Konfiguration
Die Chunk-Größe wird in appsettings.json festgelegt:
"Attachments": {
"ChunkSizeInMb": 50
}
Zusätzlich können Sie alle Anhänge automatisch chunken:
"Attachments": {
"ChunkAllAttachments": true,
"ChunkSizeInMb": 50
}
Wichtig für
- große PDF-Dateien
- Binärdateien (z. B. ZIP-Archive)
- strukturierte Fachanhänge
- Uploads mit Speicherbeschränkungen
Der Receiver reassembliert die Fragmente transparent – der Empfänger erhält immer die vollständige Datei, unabhängig von der Fragmentierung beim Versand.
Reply Channel (Rückkanal)
Geben Sie an, wie der Empfänger verschlüsselt antworten kann:
// Beispiel mit einem ApiJwk-Objekt
var publicJwk = System.Text.Json.JsonSerializer.Deserialize<ApiJwk>(publicJwkJson)!;
.WithReplyChannel(ReplyChannel.OfFitConnect(publicJwk, []))
6. Troubleshooting & Fehlerquellen
| Fehlerquelle | Prüfung |
|---|---|
| Routing Parameter | Wurden ags, ars und areaId gleichzeitig gesetzt? Das SDK erlaubt nur einen dieser Werte pro Aufruf. |
| Keine Route gefunden | Prüfen Sie, ob der Leistungsschlüssel und der Regionalschlüssel in der gewählten Umgebung (TEST/PROD) aktiv sind. |
| Schema-Validierung | Entspricht das JSON-Payload exakt der im Builder angegebenen schemaUri? |
| Credentials | Sind ClientId und ClientSecret im Sender-Bereich der appsettings.json korrekt hinterlegt? |
7. Versandarten im Vergleich
| Methode | Beschreibung | Use-Case |
|---|---|---|
SendSubmission | SDK verschlüsselt Daten & Metadaten automatisch. | Standard für 99% aller Integrationen. |
SendEncrypted | Daten müssen vorab manuell verschlüsselt werden. | Nur bei speziellen E2E-Sicherheitsvorgaben nötig. |