IRONSOFTWAREHOME

IronPDF Azure容器中的gRPC连接错误

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

当IronPDF部署在Azure容器实例或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. 设置容器重启策略为Always

在Azure容器实例上,将重启策略设置为Always。 在Azure App Service上,使用专用计划(Basic B1及以上)而不是缩放到零并终止容器的Consumption计划。 对于需要持久连接的工作负载,由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 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

...
阅读更多

准备开始了吗?

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 天试用密钥
无需信用卡或创建账户