gRPC-Verbindungsfehler in IronPDF Azure-Containern

Curtis Chau
Curtis Chau
Updated: 10. Juni 2026

Wenn IronPDF in Docker-Containern auf Azure Container Instances oder Azure App Service bereitgestellt wird, kann die gRPC-Kommunikation zwischen der Anwendung und der IronPDF-Engine fehlschlagen. Dies passiert am häufigsten, nachdem ein Container in den Ruhezustand wechselt oder neu gestartet wird, oder wenn der gRPC-Kanal nicht mit einer Wiederholungslogik konfiguriert ist.

Grpc.Core.RpcException: Status(StatusCode="Unavailable", Detail="failed to connect to all addresses")
Text
Status(StatusCode="Unknown", Detail="Stream removed")
Text

Diese Fehler treten auf, weil Azure-Containerumgebungen Container während Leerlaufzeiten herunterfahren oder recyceln können. Ohne eine Wiederholungsrichtlinie auf dem gRPC-Kanal führt eine einzelne abgebrochene Verbindung dazu, dass der Aufruf sofort fehlschlägt, anstatt sich erneut zu verbinden. HTTP/2-Stream-Schließungen und plattformabhängige Kanalsetup-Ungleichheiten können ebenfalls diese Fehler verursachen.

Lösung

1. Setzen Sie die Container-Neustartrichtlinie auf Immer

Setzen Sie bei Azure Container Instances die Neustartrichtlinie auf Always. Bei Azure App Service verwenden Sie einen dedizierten Plan (Basic B1 oder höher) anstelle des Consumption-Plans, der auf Null skaliert und Container beendet. Für Arbeitslasten, die persistente Verbindungen erfordern, sind von Kubernetes verwaltete Container eine stabilere Option.

2. Konfigurieren Sie die gRPC-Wiederholungslogik

Wählen Sie den Ansatz, der zu Ihrem Ziel-Framework passt.

Für .NET Framework: verwenden Sie Grpc.Core.Channel mit einer JSON-Wiederholungsrichtlinie

using Grpc.Core;
using IronPdf.GrpcLayer;

string jsonString = @"
{
    ""methodConfig"": [
        {
            ""name"": [
                {
                    ""service"": ""ironpdfengineproto.IronPdfService""
                }
            ],
            ""retryPolicy"": {
                ""maxAttempts"": 5,
                ""initialBackoff"": ""1.0s"",
                ""maxBackoff"": ""30s"",
                ""backoffMultiplier"": 1.5,
                ""retryableStatusCodes"": [
                    ""UNAVAILABLE""
                ]
            }
        }
    ]
}";

var channel = new Channel("localhost:33350", ChannelCredentials.Insecure,
    new[]
    {
        new ChannelOption("grpc.service_config", jsonString)
    });

IronPdf.Installation.ConnectToIronPdfHost(
    IronPdfConnectionConfiguration.WithCustomChannel(channel)
);

Für .NET Core / .NET 5+: verwenden Sie Grpc.Net.Client.GrpcChannel mit RetryPolicy

using Grpc.Net.Client;
using Grpc.Net.Client.Configuration;
using IronPdf.GrpcLayer;
using Grpc.Core;

var retryPolicy = new RetryPolicy
{
    MaxAttempts = 5,
    InitialBackoff = TimeSpan.FromSeconds(1),
    MaxBackoff = TimeSpan.FromSeconds(30),
    BackoffMultiplier = 1.5,
    RetryableStatusCodes = { StatusCode.Unavailable }
};

var methodConfig = new MethodConfig
{
    Names = { MethodName.Default },
    RetryPolicy = retryPolicy
};

var channel = GrpcChannel.ForAddress("http://localhost:33350", new GrpcChannelOptions
{
    ServiceConfig = new ServiceConfig { MethodConfigs = { methodConfig } }
});

IronPdf.Installation.ConnectToIronPdfHost(
    IronPdfConnectionConfiguration.WithCustomChannel(channel)
);

3. Nutzen Sie RemoteServer für einfachere Konfiguration

Wenn Sie keine benutzerdefinierten Kanaloptionen benötigen, bietet RemoteServer integrierte Wiederholungsunterstützung und ist der empfohlene Ausgangspunkt für die meisten Azure-Containerbereitstellungen. Verwenden Sie dies anstelle von .Docker(), wenn sich die Engine- und Anwendung-Container nicht im selben lokalen Netzwerk befinden. Für die vollständige Verbindungskonfigurationsreferenz siehe den IronPDF Engine Guide.

IronPdf.Installation.ConnectToIronPdfHost(
    IronPdfConnectionConfiguration.RemoteServer("http://your-container-host:33350")
);

4. Verhindern Sie das Herunterfahren der Engine zwischen Anfragen

Standardmäßig fährt IronPDF seine Engine zwischen Anfragen herunter. Indem Sie SkipShutdown auf true setzen, bleibt der Engine-Prozess aktiv, wodurch die Wiederverbindungsüberlastung vermieden und die Wahrscheinlichkeit von Verbindungsfehlern in langlaufenden Containern verringert wird.

IronPdf.Installation.SkipShutdown = true;

Debug-Tipps

Um detaillierte gRPC-Diagnoseausgaben zu erhalten, setzen Sie die folgenden Umgebungsvariablen in Ihrer Dockerfile oder Containerkonfiguration:

ENV GRPC_TRACE=all
ENV GRPC_VERBOSITY=DEBUG
Dockerfile

Prüfen Sie cef.log und IronSoftware.log für zusätzliche Details zu Verbindungsfehlern. Um zu erfahren, wie Sie Protokolldateien von Azure abrufen, siehe Azure-L Protokolldateien.

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender Handbücher.

Weiterlesen

Bereit anzufangen?

Nuget Downloads 21,739,885Version:2026.10gerade veröffentlicht