使用 AMQP 从辅助角色连接到 Azure 服务总线

Connect to Azure Service Bus from a Worker Role using AMQP

我正在尝试使用 AMQP 从辅助角色连接到我的 Azure 服务总线。但是,我收到超时异常。当我使用网络嗅探器时,我看到它正在尝试使用端口 5671 与 Azure 服务总线通信。但它没有发送 ACK 消息,只是超时了。我从 Visual Studio 2015 年开始使用 Azure 模拟器进行尝试。

当我尝试完全相同时,从同一台计算机和网络接口,然后从一个普通的命令提示符应用程序(所以没有 Azure 辅助角色 and/or 模拟器),它起作用了。我的应用程序能够向 Azure 发送 ACK 包并从 Azure 接收服务器问候。

Azure Emulator 或 Worker Role 是否默认阻止某些端口?为什么它在我的命令提示符应用程序中起作用,但在我的 Azure 辅助角色中不起作用?我使用相同的连接字符串和以下代码:

TopicClient client = TopicClient.CreateFromConnectionString(_connectionstring, _queueName);
client.Send(new BrokeredMessage(msg));

按可能性排序,我猜问题是:

  • _connectionstring 在 VS 和您的控制台应用程序中具有不同的值;可能是由于运行时使用的配置文件 and/or 但是您正在加载连接字符串。我建议 re-trying 您在 CreateFromConnectionString() 中使用 hard-coded 值进行测试以排除这种情况。
  • 有防火墙阻塞端口(Windows防火墙、公司网络等)
  • 存在干扰流量的杀毒软件

我终于找到问题了。在使用 Azure 模拟器的解决方案中,我包含了以下包:

<package id="WindowsAzure.ServiceBus" version="2.5.1.0" targetFramework="net451" />

在我的控制台应用程序中,我使用了以下包:

<package id="WindowsAzure.ServiceBus" version="3.0.9" targetFramework="net46" />

因此将我的 Azure 解决方案更改为版本 3.0.9 解决了问题。似乎 Microsoft 在版本 3.x.

中引入了重大更改