0 c# azureservicebus asp.net-core
我正在尝试向以 azure 托管的队列发送消息。我的应用程序通过代理与世界通信。我使用 .Net Core 2.1 和新的标准 azure 服务总线 nuget。我需要通过端口 443 通过网络套接字使用 Amqp。不幸的是,我没有成功。有没有人实施过这样的事情?任何人都可以提供有关如何实现这一目标的代码片段吗?
提前致谢!这是我正在尝试的:
var transportProvider = new AmqpTransportProvider();
var amqpSettings = new AmqpSettings
{
RequireSecureTransport = true, TransportProviders = {transportProvider}
};
var socketSettings = new WebSocketTransportSettings()
{
Proxy = new WebProxy() {Address = new Uri("http://myproxy"), BypassProxyOnLocal = false},
SubProtocol = "https",
Uri = new Uri($"wss://{_azureConfiguration.NameSpace}"),
};
AmqpTransportInitiator transportIntInitiator = new AmqpTransportInitiator(amqpSettings, socketSettings);
var b = transportIntInitiator.ConnectAsync(TimeSpan.FromSeconds(30), new TransportAsyncCallbackArgs());
ServiceBusConnection s = new ServiceBusConnection($"sb://{_azureConfiguration.NameSpace}", TransportType.AmqpWebSockets);
s.TokenProvider = tokenProvider;
s.OperationTimeout = TimeSpan.FromSeconds(30);
var sender = new MessageSender(s, _azureConfiguration.QueueName);
string messageBody = $"Message";
var message = new Message(Encoding.UTF8.GetBytes(messageBody));
await sender.SendAsync(message);
Run Code Online (Sandbox Code Playgroud)
代码收到以下错误:无法连接到远程服务器。内部异常详情:连接尝试失败,因为连接方在一段时间后没有正确响应,或者因为连接的主机没有响应而建立连接失败。
堆栈跟踪:
System.Net.WebSockets.WebSocketException (0x80004005): 无法连接到远程服务器 ---> System.Net.Http.HttpRequestException: 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机未能响应 ---> System.Net.Sockets.SocketException: 连接尝试失败,因为连接方在一段时间后没有正确响应,或建立连接失败,因为连接的主机未能响应在 System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancelationToken) --- 内部异常堆栈跟踪结束 --- 在 System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken)取消令牌)在 System.Threading.Tasks.ValueTask1.get_Result()
at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Threading.Tasks.ValueTask1.get_Result() 在 System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask 1 creationTask)
at System.Threading.Tasks.ValueTask1.get_Result() 在 System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancelationToken) 在 System.Net.Http.RedirectHandler .SendAsync(HttpRequestMessage request, CancellationToken cancelationToken) at System.Net.WebSockets.WebSocketHandle.ConnectAsyncCore(Uri uri, CancellationToken cancellingToken, ClientWebSocketOptions options) at Microsoft.Azure.ServiceBus.Core.MessageSender.OnSendAsync(IList 1 messageList) in C:\source\azure-service-bus-dotnet\src\Microsoft.Azure.ServiceBus\Core\MessageSender.cs:line 562
at Microsoft.Azure.ServiceBus.RetryPolicy.RunOperation(Func1 operation, TimeSpan operationTimeout) in C:\source\azure-service-bus-dotnet\src\Microsoft.Azure.ServiceBus\RetryPolicy.cs:line 83 at Microsoft.Azure.ServiceBus.RetryPolicy.RunOperation(Func1 operation, TimeSpan operationTimeout) in C:\source\azure-service-bus-dotnet\src\Microsoft.Azure.ServiceBus\RetryPolicy.cs:line 105
at Microsoft.Azure.ServiceBus.Core.MessageSender.SendAsync(IList1 messageList) 在 C:\source\azure-service-bus-dotnet\src\Microsoft.Azure.ServiceBus\Core\MessageSender.cs:line 252
确保您使用的是 Microsoft.Azure.ServiceBus 和 Microsoft.Azure.WebJobs.Extensions.ServiceBus 3.x 函数(我分别使用了 3.4.0 和 3.0.4)。使用标准 var messageSender = new MessageSender(queueConnectionString, queueName, RetryPolicy.Default);
只需将您的服务总线连接字符串更改为
Endpoint=sb://yadayada.servicebus.windows.net/;SharedAccessKeyName=SenderPolicy;SharedAccessKey=yadayada; TransportType=AmqpWebSockets
它将使用 websockets/https,因此使用端口 443。抱歉没有让代理部分工作,但我的印象是如果它是在网络级别设置的,它会自动检测并且上面应该可以工作。还有一个中继直通选项。如果我让它工作,我会更新,但我最初发现这篇文章只是试图让 443/ampqwebsockets 工作。
| 归档时间: |
|
| 查看次数: |
3760 次 |
| 最近记录: |