Zum Hauptinhalt springen

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.json mit gültigen Sender.ClientId und Sender.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, ars oder areaId) 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

  1. Der Sender fragmentiert den Anhang in mehrere Teile (Chunk-Größe konfigurierbar)
  2. Die Fragmente werden nacheinander übertragen
  3. 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

FehlerquellePrüfung
Routing ParameterWurden ags, ars und areaId gleichzeitig gesetzt? Das SDK erlaubt nur einen dieser Werte pro Aufruf.
Keine Route gefundenPrüfen Sie, ob der Leistungsschlüssel und der Regionalschlüssel in der gewählten Umgebung (TEST/PROD) aktiv sind.
Schema-ValidierungEntspricht das JSON-Payload exakt der im Builder angegebenen schemaUri?
CredentialsSind ClientId und ClientSecret im Sender-Bereich der appsettings.json korrekt hinterlegt?

7. Versandarten im Vergleich

MethodeBeschreibungUse-Case
SendSubmissionSDK verschlüsselt Daten & Metadaten automatisch.Standard für 99% aller Integrationen.
SendEncryptedDaten müssen vorab manuell verschlüsselt werden.Nur bei speziellen E2E-Sicherheitsvorgaben nötig.