IronPDF Azure Kapsayıcılarında gRPC Bağlantı Hataları

Curtis Chau
Curtis Chau
Updated: 10 Haziran 2026

IronPDF, Azure Kapsayıcı Örnekleri veya Azure Uygulama Hizmeti'nde Docker kapsayıcıları içinde dağıtıldığında, uygulama ile IronPDF motoru arasındaki gRPC iletişimi başarısız olabilir. Bu durum, bir kapsayıcı boşta kaldıktan veya yeniden başlatıldıktan sonra ya da gRPC kanalı yeniden deneme mantığı ile yapılandırılmadığında en sık meydana gelir.

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

Bu hatalar, Azure kapsayıcı ortamlarının boşta geçen dönemlerde kapsayıcıları kapatıp geri alabileceği için meydana gelir. gRPC kanalı üzerinde bir yeniden deneme politikası olmadan, tek bir bağlantı kaybı aramanın hemen başarısız olmasına neden olur, yeniden bağlanmaz. HTTP/2 akış kapatılması ve platforma özgü kanal ayarlama uyumsuzlukları da bu hataları üretebilir.

Çözüm

1. Kapsayıcı Yeniden Başlatma Politikasını Her Zaman Olarak Ayarlayın

Azure Kapsayıcı Örneklerinde, yeniden başlatma politikasını Always olarak ayarlayın. Azure Uygulama Hizmeti'nde, sıfıra ölçeklenen ve kapsayıcıları sonlandıran Tüketim planı yerine özel bir plan (Temel B1 veya daha yüksek) kullanın. Kalıcı bağlantılar gerektiren işler için, Kubernetes tarafından yönetilen kapsayıcılar daha istikrarlı bir seçenek sunar.

2. gRPC Yeniden Deneme Mantığını Yapılandırın

Hedef çerçevenize uygun yaklaşımı seçin.

.NET Framework için: JSON yeniden deneme politikası ile Grpc.Core.Channel kullanın

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+ için: Grpc.Net.Client.GrpcChannel ile RetryPolicy kullanın

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. Daha Basit Yapılandırma için RemoteServer Kullanın

Özel kanal seçeneklerine ihtiyacınız yoksa, RemoteServer yerleşik yeniden deneme desteği sağlar ve çoğu Azure kapsayıcı dağıtımı için önerilen başlangıç ​​noktasıdır. Motor ve uygulama kapsayıcıları aynı yerel ağda olmadığında, bunu .Docker() yerine kullanın. Tam bağlantı yapılandırma referansı için, IronPDF Motoru kılavuzuna bakın.

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

4. İstekler Arasında Motorun Kapatılmasını Önleyin

Varsayılan olarak, IronPDF istekler arasında motorunu kapatır. SkipShutdown ayarını true yaparak motor sürecini canlı tutar, böylece yeniden bağlantı yükünü önler ve uzun süre çalışan kapsayıcılarda bağlantı hatası olasılığını azaltır.

IronPdf.Installation.SkipShutdown = true;

Hata Ayıklama İpuçları

Detaylı gRPC tanılama çıktısı almak için, Dockerfile ya da kapsayıcı yapılandırmanızda aşağıdaki ortam değişkenlerini ayarlayın:

ENV GRPC_TRACE=all
ENV GRPC_VERBOSITY=DEBUG
Dockerfile

cef.log ve IronSoftware.log konularını kontrol edin, bağlantı hataları hakkında ek ayrıntılar için. Azure'dan log dosyalarını nasıl indireceğinizi öğrenmek için Azure Log Dosyaları bölümüne bakın.

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

Daha Fazla Oku

Başlamaya Hazır mısınız?

Nuget Downloads 21,739,885Sürüm:2026.10yeni yayınlandı