簡體   English   中英

Azure ServiceBus FaultTolerantAmqpObject`1' 異常

[英]Azure ServiceBus FaultTolerantAmqpObject`1' Exception

因此,由於需要 TLS 1.2,我已升級到 Azure.Messaging.ServiceBus 版本 7.1.2,我的項目升級到 .NET 4.7.2。 我像BusListener.cs一樣重寫了偵聽器(即本地 windows 服務):

public static async Task ReceiveMessagesAsync()
    {   
        await using (ServiceBusClient client = new ServiceBusClient(ConfigurationManager.AppSettings[SERVICE_BUS_CONNECTION_STRING]))
        {
            ServiceBusProcessor processor = client.CreateProcessor(QUEUE_NAME, new ServiceBusProcessorOptions());

            processor.ProcessMessageAsync += MessageHandler;
            processor.ProcessErrorAsync += ErrorHandler;

            await processor.StartProcessingAsync();
        }
    }

我在我的 windows 服務ServiceMain.cs中調用

Task.Run(() => BusListener.ReceiveMessagesAsync());

等待大約 10 秒后,我收到此錯誤,但從未收到任何消息:

Cannot access a disposed object. Object name: 'FaultTolerantAmqpObject`1'. - at Microsoft.Azure.Amqp.Singleton`1.d__13.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Azure.Messaging.ServiceBus.Amqp.AmqpConnectionScope.d__54.MoveNext() 

我環顧四周,它看起來像來自另一個答案: Service Bus Disposed Object ,由於方法是 static,我可能會遇到問題,即使這是我在此處的 Microsoft“如何”指南中所遵循的: Z5E0656C50BADE50A184 ://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues

我不確定是我寫錯了服務總線部分還是我遺漏了其他東西? 有沒有辦法只 ping 或測試連接以更好地了解問題所在?

當您創建ServiceBusClient時,它擁有與它創建的任何子對象所使用的服務的連接。 通過在此行中處理客戶端:

await using (ServiceBusClient client = new ServiceBusClient(ConfigurationManager.AppSettings[SERVICE_BUS_CONNECTION_STRING]))

您正在關閉您創建的處理器使用的連接。 我建議將客戶端從該方法中提升出來,並允許它在應用程序的整個生命周期內以 singleton 的形式存在。 一般來說,這是我們推薦用於管理 Azure 客戶端的方法。 (見: 客戶生命周期

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM