Подключитесь к служебной шине Azure с помощью Amqp через WebSockets с помощью новой стандартной библиотеки - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь отправить сообщение в мою очередь, размещенную в Azure.Мое приложение общается с миром через прокси.Я использую .Net Core 2.1 и новый стандартный сервисный сервис Azure.Мне нужно использовать Amqp через веб-сокеты через порт 443. К сожалению, мне это не удалось.Есть кто-нибудь, кто реализовал такую ​​вещь?Кто-нибудь может предоставить фрагмент кода о том, как этого добиться?

Заранее спасибо!Вот что я пытаюсь:

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);

Код получает следующую ошибку: Невозможно подключиться к удаленному серверу.Внутренние сведения об исключении: попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или не удалось установить соединение, так как подключенный хост не смог ответить.

StackTrace:

Система.Net.WebSockets.WebSocketException (0x80004005): невозможно подключиться к удаленному серверу ---> System.Net.Http.HttpRequestException: попытка подключения не удалась, поскольку подключенная сторона не ответила должным образом через определенный период времени, или не удалось установить соединениепотому что подключенный хост не смог ответить ---> System.Net.Sockets.SocketException: попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или не удалось установить соединение, поскольку подключенный хост не смог ответить в системе.Net.Http.ConnectHelper.ConnectAsync (Строковый хост, порт Int32, CancellationToken cancellationToken) --- Конец трассировки стека внутренней исключительной ситуации --- на System.Net.Http.ConnectHelper.ConnectAsync (Строковый хост, IПорт nt32, CancellationToken (CancellationToken) в System.Threading.Tasks.ValueTask 1.get_Result() at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken) at System.Threading.Tasks.ValueTask 1.get_Result () в System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync (ValueTask 1 creationTask) at System.Threading.Tasks.ValueTask 1.get_Restt.Phttp) .HTP..SendWithRetryAsync (запрос HttpRequestMessage, Boolean doRequestAuth, CancellationToken cancellationToken) в System.Net.Http.RedirectHandler.SendAsync (запрос HttpRequestMessage, CancellationTokenMicrosoft.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(Func 1, операция TimeSpanTimeout) в C: \ source \ azure-service-bus-dotnet \ src \ Microsoft.Azure.ServiceBus \ RetryPolicy.cs: строка 83в Microsoft.Azure.ServiceBus.RetryPolicy.RunOperation (Func 1 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(IList 1 messageList) в C: \ source \ azure-service-bus-dotnet \ src \ Microsoft.Azure.ServiceBus \ Core \ MessageSender.cs: строка 252

1 Ответ

0 голосов
/ 26 апреля 2019

Убедитесь, что вы используете Microsoft.Azure.ServiceBus и для функций Microsoft.Azure.WebJobs.Extensions.ServiceBus 3.x (я использовал 3.4.0 и 3.0.4 соответственно).Используйте стандартную переменную messageSender = new MessageSender (queueConnectionString, queueName, RetryPolicy.Default);

Просто измените строку подключения служебной шины на

Конечная точка = sb: //yadayada.servicebus.windows.net/; SharedAccessKeyName = SenderPolicy; SharedAccessKey = yadayada; TransportType = AmqpWebSockets

И он будет использовать websockets / https и, следовательно, порт 443. К сожалению, прокси-компонент не работает, но у него сложилось впечатление, что если он настроен на уровне сети, он будет автоматически определяться, и вышеописанное должно работать.Существует также опция через реле.Если я получу его, я обновлю, но я сначала обнаружил, что этот пост просто пытается заставить работать 443 / ampqwebsockets.

...