Не удается подключиться к Azure ServiceBus с помощью Microsoft.Azure.ServiceBus - PullRequest
0 голосов
/ 08 июня 2018

Я создал очень простое консольное приложение, которое подключается к Azure ServiceBus и отправляет одно сообщение.Я попробовал последнюю версию библиотеки от Microsoft (Microsoft.Azure.ServiceBus), но независимо от того, что я делаю, я просто получаю эту ошибку:

Невозможно установить соединение, так как целевая машина активно отказала в этом. ErrorCode: ConnectionRefused

Я попробовал точно такую ​​же строку подключения в Service Bus Explorer, и она работает просто отлично.Более того, я без проблем подключился, используя более старую библиотеку от Microsoft (WindowsAzure.ServiceBus).

var sender = new MessageSender("endpoint", "topicName");
sender.SendAsync(new Message(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject("test"))));

Я пробовал с .NET Framework 4.6.2 и Core, то же исключение.Я подозреваю, что могут быть некоторые различия в протоколе по умолчанию, который используют эти библиотеки, но я не мог понять это наверняка.

PS Пробовал пример из Документы Microsoft , но результат все ещето же исключение

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Кажется, что в документации не хватает информации о том, как подключиться с помощью HTTPS (Amqp через WebSockets), но после некоторой помощи Шона Фельдмана в принятом ответе мне удалось подключиться.Вот код, который я использовал, если кто-то заинтересован:

var tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(
    "RootManageSharedAccessKey", // SharedAccessKeyName
    "SomeToken");

var sender = new MessageSender(
    "sb://mydomain.servicebus.windows.net/",
    "topicName",
    tokenProvider,
    TransportType.AmqpWebSockets);

Или вариант, который позволяет вам иметь всю строку подключения в один кусок

var builder = new ServiceBusConnectionStringBuilder("YouConnectionString");

var tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(
    builder.SasKeyName,
    builder.SasKey);

var sender = new MessageSender(
    builder.Endpoint,
    "TopicName",
    tokenProvider,
    TransportType.AmqpWebSockets);

Это на самом деле можно использоватьConnectionString напрямую, но затем он должен быть расширен для использования правильного протокола.

var sender = new MessageSender("TransportType=AmqpWebSockets;Endpoint=...", "TopicName")

Или версия, позволяющая встроить EntityPath в ConnectionString

var connectionBuilder = new ServiceBusConnectionStringBuilder("EntityPath=MyTopic;TransportType=AmqpWebSockets;Endpoint=...")
var sender = new MessageSender(connectionBuilder);
0 голосов
/ 09 июня 2018

Старый клиент поддерживает ConnectivityMode с использованием TCP, HTTP, HTTPS и AutoDetect.ServiceBus Explorer использует AutoDetect, сначала пытается TCP, а затем переключается на HTTPS, независимо от используемого TransportMode (SBMP или AMQP).

С новым клиентом это изменилось.TransportMode теперь объединяет обе опции и предлагает Amqp (AMQP через TCP) или AmqpWebSockets (AMQP через WebSockets).Там нет режима AutoDetect.Вам нужно будет создать своих клиентов и указать TransportType как AmqpWebSockets, чтобы обойти заблокированный TCP-порт 5671 и вместо этого использовать порт 443.

...