c# - Azure ServiceBus FaultTolerantAmqpObject`1'异常

标签 c# azure azureservicebus

因此,由于需要 TLS 1.2,我已升级到 Azure.Messaging.ServiceBus 版本 7.1.2,并将我的项目升级到 .NET 4.7.2。我重写了监听器(即本地 Windows 服务),如下 BusListener.cs :

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由于该方法是静态的,我可能会遇到问题,尽管这是我在此处的 Microsoft“操作方法”指南中遵循的内容:https://learn.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]))

您正在关闭您创建的处理器所使用的连接。我建议将客户端从方法中提升出来,并允许它在应用程序的生命周期中作为单例存在。一般来说,这是我们推荐的管理 Azure 客户端的方法。 (参见: client lifetime )

关于c# - Azure ServiceBus FaultTolerantAmqpObject`1'异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67807718/

相关文章:

c# - 如何限制 Office 365 应用程序的邮箱访问

c# - 将 Serilog 与 Azure 日志流结合使用

azure - 如何在 Azure Windows Server 虚拟机中使用网络摄像头?

azure - 操作需要时间时重试消息

c# - 任务线程和 Azure CloudBlobClient

c# - C#中支持两个相邻字母Transposition的Levenshtein编辑距离算法

azure - 通过服务总线消息传递使用 Azure 服务结构的用例有哪些?

azure - ServiceBusReceivedMessage 的单元测试

c# - 使用 Zebra 打印机打印多个不同的标签

c# - 使用 xamarin 进行原生开发