IRONSOFTWAREHOME

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
Text

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

Curtis Chau
技術作家

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

...
閱讀更多

準備開始了嗎?

Nuget Downloads 20,878,335版本:2026.9剛剛發布

立即獲取您的免費30天試用密鑰
不需要信用卡或建立賬戶
C# 用於PDF的NuGet程式庫
使用NuGet安裝

版本: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解決方案資源管理器,右鍵點選參考,管理NuGet包
  2. 選擇瀏覽並搜尋"IronPdf"
  3. 選擇套件並安裝
C# PDF DLL
下載DLL

版本: 2026.9

或者點擊此處下載Windows安裝程式。

  1. 下載並解壓IronPDF到類似~/Libs的位置,位於您的解決方案目錄中
  2. 在Visual Studio解決方案資源管理器,右鍵點選參考。選擇瀏覽,"IronPdf.dll"

授權從$999

有問題嗎?聯絡我們的開發團隊。

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
預訂您的免費現場演示
Booking Badge

受到全球數百萬工程師的信任

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表格或電子郵件sales@ironsoftware.com
您的詳細資訊將始終保密
受到全球數百萬工程師的信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立