我一直在使用Azure服务总线,并一直在跟踪
this
微软的教程。
我正处于尝试向队列发送消息的阶段,但我收到一个身份验证错误:
身份验证失败,因为远程方已关闭
传输流。
在Microsoft.azure.servicebus.core.messagesender.d_u53.moveNext()上
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()时
在system.runtime.compilerservices.taskwaiter.handlenonsuccessanddebuggernotification(任务任务)
在Microsoft.Azure.ServiceBus.RetryPolicy.D_uu18.MoveNext()上
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()时
在Microsoft.Azure.ServiceBus.RetryPolicy.D_uu18.MoveNext()上
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()时
在system.runtime.compilerservices.taskwaiter.handlenonsuccessanddebuggernotification(任务任务)
在microsoft.azure.servicebus.core.messagesender.d_uu40.moveNext()上
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()时
在system.runtime.compilerservices.taskwaiter.handlenonsuccessanddebuggernotification(任务任务)
在sender.program.d_uu0.moveNext()中,C:\repos\serviceBusTest\sender\program.cs:line 27
还有一个内部异常,消息几乎相同,这表明问题与TLS/SSL有关:
身份验证失败,因为远程方已关闭传输流。
at system.net.security.sslstate.startreadframe(byte[]buffer,int32 readbytes,asyncProtocolRequest asyncRequest)
at system.net.security.sslstate.partialframecallback(AsyncProtocolRequest异步请求)
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()时
at system.net.security.sslstate.InternalEndProcessAuthentication(LazyAsyncResult LazyResult)
at system.net.security.sslstate.endProcessAuthentication(IAsyncResult结果)
在System.NET.Security.SSLStream.EndAuthenticateAsClient上(IAsyncResult AsyncResult)
在system.threading.tasks.taskfactory
1.FromAsyncCoreLogic(IAsyncResult iar, Func
2端功能,动作
1 endAction, Task
1承诺,布尔要求同步)
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()时
在
[剪短…]
可以看到此堆栈跟踪的其余部分
here
.
在
await queueClient.SendAsync(message);
以下代码中的一个(ConnectionString的某些部分已用“*******”):
namespace CoreSenderApp
{
using System;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Azure.ServiceBus;
class Program
{
// Connection String for the namespace can be obtained from the Azure portal under the
// 'Shared Access policies' section.
const string ServiceBusConnectionString =
"Endpoint=sb://le********est.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=aZDFcj****************v4=";
const string QueueName = "testbus";
static IQueueClient queueClient;
static void Main(string[] args)
{
MainAsync().GetAwaiter().GetResult();
}
static async Task MainAsync()
{
const int numberOfMessages = 10;
queueClient = new QueueClient(ServiceBusConnectionString, QueueName);
Console.WriteLine("======================================================");
Console.WriteLine("Press ENTER key to exit after receiving all the messages.");
Console.WriteLine("======================================================");
// Send Messages
await SendMessagesAsync(numberOfMessages);
Console.ReadKey();
await queueClient.CloseAsync();
}
static async Task SendMessagesAsync(int numberOfMessagesToSend)
{
try
{
for (var i = 0; i < numberOfMessagesToSend; i++)
{
// Create a new message to send to the queue
string messageBody = $"Message {i}";
var message = new Message(Encoding.UTF8.GetBytes(messageBody));
// Write the body of the message to the console
Console.WriteLine($"Sending message: {messageBody}");
// Send the message to the queue
await queueClient.SendAsync(message);
}
}
catch (Exception exception)
{
Console.WriteLine($"{DateTime.Now} :: Exception: {exception.Message}");
}
}
}
}
我相信
ServiceBusConnectionString
和
QueueName
是核心设置的,因为如果我更改这些值,在
QueueClient
已实例化。
我已经尽我所能地仔细学习了本教程,但我无法克服这个错误。我还搜索了谷歌,但还没有找到其他遇到这个问题的人。我做错什么了?