Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法使用Microsoft.Azure.ServiceBus连接到Azure ServiceBus_C#_.net_Azure_Azureservicebus - Fatal编程技术网

C# 无法使用Microsoft.Azure.ServiceBus连接到Azure ServiceBus

C# 无法使用Microsoft.Azure.ServiceBus连接到Azure ServiceBus,c#,.net,azure,azureservicebus,C#,.net,Azure,Azureservicebus,我创建了一个非常简单的控制台应用程序,它连接到Azure ServiceBus并发送一条消息。我尝试了Microsoft的最新库(Microsoft.Azure.ServiceBus),但无论我做什么,我都会遇到以下错误: 无法建立连接,因为目标计算机处于活动状态 拒绝它错误代码:ConnectionRejected 我在服务总线资源管理器中尝试了完全相同的连接字符串,它确实工作得很好。此外,我使用Microsoft的旧库(WindowsAzure.ServiceBus)连接时没有问题 我尝试了

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

无法建立连接,因为目标计算机处于活动状态 拒绝它错误代码:ConnectionRejected

我在服务总线资源管理器中尝试了完全相同的连接字符串,它确实工作得很好。此外,我使用Microsoft的旧库(
WindowsAzure.ServiceBus
)连接时没有问题

我尝试了.NETFramework4.6.2和Core,同样的例外。我怀疑这些库使用的默认协议可能存在一些差异,但我无法确定这一点

p.S.尝试了来自的示例,但结果仍然是相同的异常

旧客户端支持使用TCP、HTTP、HTTPS和
AutoDetect
。ServiceBus Explorer正在使用
AutoDetect
,首先尝试TCP,然后故障切换到HTTPS,而不管您使用的是
TransportMode
(SBMP或AMQP)


随着新客户机的出现,情况发生了变化
TransportMode
现在结合了这两种选项,并提供了
Amqp
(TCP上的Amqp)或
AmqpWebSockets
(WebSockets上的Amqp)。没有
自动检测
模式。您必须创建您的客户端并指定
TransportType
以绕过阻塞的TCP端口5671,而是使用端口443。

关于如何使用HTTPS(WebSockets上的Amqp)进行连接,文档中似乎缺少很多内容,但在得到Sean Feldman的帮助后,我成功连接了。以下是我在有人感兴趣时使用的代码:

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

你是不是碰巧在防火墙后面?是的,我几乎肯定是在防火墙后面,而且似乎默认协议是不同的。谢谢你的回答,我会尝试这样做,尽管我没有找到我需要在新库中设置TransportType的确切位置。我还没有找到关于这些细节的好文档,但我会尝试用你的提示搜索更多
MessageSender
constructor重载获取端点的FQDN,而
TokenProvider
正是您所需要的。请确保从今天开始使用最新的3.0.2版本。实际上,我刚刚找到了一种更简单的方法,我们可以使用协议扩展连接字符串:
TransportType=AmqpWebSockets
“实际上可以直接使用ConnectionString,但必须对其进行扩充才能使用正确的协议。”我的意思是为
TransportType
使用一个连接字符串和一个单独的可选参数。无论哪种方式,文档都可能需要一些帮助:)@pseabury很好的问题,但你问错人了。我在一个限制性的公司防火墙后面收到了连接超时错误,添加了TransportType=AmqpWebSockets;我的连接字符串修复了它。和上面发生在我身上的一样。我在公司的丛林中挣扎了很多,在那里我甚至看不到什么被阻止了,并且意识到它使用的是5671。在另一个stackoverflow线程中看到了答案。Micorshit文档中没有提到过这一点。
var connectionBuilder = new ServiceBusConnectionStringBuilder("EntityPath=MyTopic;TransportType=AmqpWebSockets;Endpoint=...")
var sender = new MessageSender(connectionBuilder);