IronPDF Azure容器中的gRPC連接錯誤

Curtis Chau
Curtis Chau
Updated: 2026年6月10日

當IronPDF部署在Azure Container Instances或Azure App Service的Docker容器內時,應用程式與IronPDF引擎之間的gRPC通信可能會失敗。 這通常發生在容器閒置或重啟後,或者gRPC通道未配置重試邏輯時。

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

這些錯誤發生是因為Azure容器環境可能會在閒置期間關閉或回收容器。 如果gRPC通道上沒有重試政策,單個連接中斷會導致呼叫立即失敗,而不是重新連接。 HTTP/2流關閉及特定平台的通道設置不匹配也可能會產生這些錯誤。

解決方案

1. 將容器重啟策略設為始終

在Azure Container Instances上,將重啟策略設置為Always。 在Azure App Service上,使用專用計畫(Basic B1或更高)而非消費計畫,因為消費計畫會縮放至零並終止容器。 對於需要持久連接的負載,Kubernetes管理的容器是一個更穩定的選擇。

2. 配置gRPC重試邏輯

選擇匹配您的目標框架的方式。

針對.NET Framework:使用Grpc.Core.Channel並配有JSON重試政策

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)
);

針對.NET Core / .NET 5+:使用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. 使用RemoteServer進行簡單配置

如果您不需要自訂的通道選項,RemoteServer提供內建重試支持,這是大多數Azure容器部署的推薦起點。 當引擎和應用程式容器不在同一本地網路上時,用此代替.Docker()。 如需完整的連接配置參考,請參見IronPDF引擎指南。

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

4. 防止在請求之間關閉引擎

預設情況下,IronPDF在請求之間會關閉其引擎。 設定true可保持引擎進程活動,這避免了重新連接的開銷並減少了在長時間運行的容器中出現連接錯誤的機會。

IronPdf.Installation.SkipShutdown = true;

除錯提示

要獲取詳細的gRPC診斷輸出,請在您的Dockerfile或容器配置中設置以下環境變數:

ENV GRPC_TRACE=all
ENV GRPC_VERBOSITY=DEBUG
Dockerfile

檢查IronSoftware.log以獲取有關連接失敗的其他詳情。 要了解如何從Azure檢索日誌文件,請參見Azure日誌文件。

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

閱讀更多

準備開始了嗎?

Nuget Downloads 21,739,885版本:2026.10剛剛發布