【问题标题】:send message to azure service bus queue from web api从 Web api 向 azure 服务总线队列发送消息
【发布时间】:2017-07-21 11:58:04
【问题描述】:

我正在尝试开始使用 Azure 服务总线队列。按照这篇文章 https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues 唯一的区别是我试图从 web api 中执行此操作。
我得到的错误是: 无法连接,因为目标机器主动拒绝 40.84.xxx.xx:443

如果有任何帮助或指点,我将不胜感激!

注意:控制台应用程序可以按照上述指南正常工作。

7/24 更新,这是我的操作方法中的代码:

   try
        {
            var connectionString =
                "Endpoint=sb://xxxxx-test.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=shared_access_key";
            var queueName = "testqueue1";

            var client = 
    QueueClient.CreateFromConnectionString(connectionString, queueName);

            var message = new BrokeredMessage(eventMessage);
            client.Send(message);
        }
        catch (Exception e)
        {
          //log exception
        }

7/25 更新。我可以通过在 web.config 中将 defaultConfig 条目设置为启用来使其工作:

 <system.net>
   <defaultProxy enabled="true"/>
 </system.net>

【问题讨论】:

  • @Maxime 如果这是一个网络问题或防火墙问题,控制台应用程序也应该得到同样的错误 - 事实并非如此。
  • @the_sheikh 创建客户端是一项昂贵的操作。您应该考虑更改您的代码以使客户端保持更长时间。
  • 除此之外,您的代码看起来还不错。就像其他人指出的那样,这是一个基础设施问题。
  • @SeanFeldman 您是否建议保持 QueueClient 实例静态,例如 httpClient?在 web.config 中添加 defaultProxy 条目后,我的 azure 代码工作。我仍在试图弄清楚为什么在控制台应用程序的情况下不需要这样做。

标签: c# azureservicebus servicebus azure-servicebus-queues


【解决方案1】:

无法建立连接,因为目标机器主动拒绝 40.84.xxx.xx:443

请检查出站443端口是否被您的防火墙阻止。

注意:控制台应用程序可以按照上述指南正常工作。

Service Bus 连接模式的默认值为 AutoDetect。它将根据自动检测机制自动在 Tcp 和 Http 模式之间进行选择,该机制会探测当前网络环境是否有可用的连接选项。它可能会为您的控制台应用程序和 Web API 应用程序选择不同的模式。在使用服务总线队列之前,请尝试在您的 Web API 应用程序中将其显式设置为 TCP。

ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Tcp;

【讨论】:

  • 将连接模式设置为 TCP 在我的 Web API 中不起作用。问题:您是否能够从 web api 或 mvc 应用程序发布到 azure queue?
  • 是的,我刚刚用我的 web api 进行了测试。我可以将消息添加到队列中。
  • 您的代码没有问题,错误与代码无关。你的机器使用代理吗?
  • 你的代理问题把我带到了这个this。看起来我只需要一个 web.config 条目。已经用这个更新了我上面的问题。
【解决方案2】:

我能够通过在 web.config 中将 defaultConfig 条目设置为启用来使其工作:

<system.net>
  <defaultProxy enabled="true"/>
</system.net>

【讨论】:

    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 2013-03-19
    • 2018-12-07
    • 2022-12-19
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    相关资源
    最近更新 更多