Cannot access a disposed object. Object name: 'tlsxyz'
从 Azure 函数向 Azure 服务总线(标准)主题发送消息时遇到随机错误。
消息错误是:
Cannot access a disposed object. Object name: 'tls2576'., Stacktrace :
at Microsoft.Azure.ServiceBus.Core.MessageSender.OnSendAsync(IList1 1 operation,
messageList) at
Microsoft.Azure.ServiceBus.RetryPolicy.RunOperation(Func
TimeSpan operationTimeout) at
Microsoft.Azure.ServiceBus.RetryPolicy.RunOperation(Func1 operation, 1
TimeSpan operationTimeout) at
Microsoft.Azure.ServiceBus.Core.MessageSender.SendAsync(IList
messageList) at ServiceBusFunctions.MyTopic.Run(HttpRequest req,
ILogger log, ExecutionContext context) in myAzureFunction
有时错误中的对象名称是\\'tls2716\\'。
代码从包含 3 个函数的 Azure 函数实例运行。有 2 个冗余功能 APP 包含从应用程序网关循环调用的相同代码。向主题发送消息的客户端代码是:
1 2 3 4 5 6 7 8 9 10 11 | var message = new Message(Encoding.UTF8.GetBytes(requestBody)); //Custom properties for topis routing message.UserProperties.Add("P1", P1); message.UserProperties.Add("P2", P2); message.UserProperties.Add("P3", P3); ITopicClient topicClient = new TopicClient(SBConnectionString, CCTopicName); await topicClient.SendAsync(message); await topicClient.CloseAsync(); |
感谢您的帮助
问题是在并发调用使用静态主题客户端时关闭它。修复方法是不要关闭 topicclient 以重用它,并在打开连接时最小化连接数和调整性能
这是由于在从内存中清除后访问已处置的对象所致。