首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法使用Microsoft.Azure.ServiceBus连接到Azure ServiceBus

无法使用Microsoft.Azure.ServiceBus连接到Azure ServiceBus
EN

Stack Overflow用户
提问于 2018-06-08 23:51:31
回答 3查看 8.6K关注 0票数 15

我已经创建了一个非常简单的控制台应用程序,它连接到Azure ServiceBus并发送一条消息。我尝试了微软最新的库(Microsoft.Azure.ServiceBus),但无论我做什么,我都会得到这个错误:

无法建立连接,因为目标计算机主动拒绝它ErrorCode: ConnectionRefused

我在Service Bus Explorer中尝试了完全相同的连接字符串,它确实工作得很好。此外,我使用微软的旧库(WindowsAzure.ServiceBus)连接也没有问题。

代码语言:javascript
复制
var sender = new MessageSender("endpoint", "topicName");
sender.SendAsync(new Message(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject("test"))));

我尝试了.NET框架4.6.2和核心,同样的例外。我怀疑这些库使用的默认协议可能存在一些差异,但我不能确定这一点。

附注:我尝试过Microsoft docs中的示例,但结果仍然是相同的异常

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-09 05:52:36

旧的客户端支持使用TCP、HTTP、HTTPS和AutoDetectConnectivityMode。ServiceBus资源管理器正在使用AutoDetect,先尝试TCP,然后故障转移到TransportMode,而不管您使用的是SBMP还是AMQP。

对于新的客户端,这一点已经改变了。TransportMode现在结合了这两种选择,并提供Amqp (基于TCP的AMQP)或AmqpWebSockets (基于WebSockets的AMQP)。没有AutoDetect模式。您必须创建客户端并将TCP指定为AmqpWebSockets,以绕过阻塞的TCP端口5671,转而使用端口443。

票数 21
EN

Stack Overflow用户

发布于 2018-06-11 18:21:07

关于如何使用HTTPS (WebSockets上的Amqp)进行连接的文档似乎很少,但在accepted answer中Sean Feldman的帮助下,我设法连接到了HTTPS。如果有人感兴趣,下面是我使用的代码:

代码语言:javascript
复制
var tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(
    "RootManageSharedAccessKey", // SharedAccessKeyName
    "SomeToken");

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

或者是一个变种,让你把整个连接字符串放在一起

代码语言:javascript
复制
var builder = new ServiceBusConnectionStringBuilder("YouConnectionString");

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

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

实际上可以直接使用ConnectionString,但是必须对其进行扩充才能使用正确的协议。

代码语言:javascript
复制
var sender = new MessageSender("TransportType=AmqpWebSockets;Endpoint=...", "TopicName")

或者允许在ConnectionString中嵌入EntityPath的版本

代码语言:javascript
复制
var connectionBuilder = new ServiceBusConnectionStringBuilder("EntityPath=MyTopic;TransportType=AmqpWebSockets;Endpoint=...")
var sender = new MessageSender(connectionBuilder);
票数 16
EN

Stack Overflow用户

发布于 2021-07-29 13:06:36

我也有同样的问题,但他对我很管用

代码语言:javascript
复制
var clientOptions = new ServiceBusClientOptions();
clientOptions.TransportType = ServiceBusTransportType.AmqpWebSockets;
client = new ServiceBusClient(connectionString, clientOptions);
sender = client.CreateSender(topicName);
// create a batch 
using ServiceBusMessageBatch messageBatch = await sender.CreateMessageBatchAsync();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50764285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档