【问题标题】:Azure Service Bus MessageReceiver Receive() web sockets errorAzure 服务总线 MessageReceiver Receive() Web 套接字错误
【发布时间】:2017-03-04 00:59:17
【问题描述】:

我正在我的网络中使用 c# 程序,并且能够将消息发布到 Azure 服务总线队列。收到它们时,我在MessageReceiver.Receive() 上遇到异常。代码和错误如下;

MessagingFactory factory = MessagingFactory.CreateFromConnectionString(QueueConnectionString);

//Receiving a message
MessageReceiver testQueueReceiver = factory.CreateMessageReceiver(QueueName);

using (BrokeredMessage retrievedMessage = testQueueReceiver.Receive(new TimeSpan(0, 0, 20)))
{
    try
    {
        var message = new StreamReader(retrievedMessage.GetBody<Stream>(), Encoding.UTF8).ReadToEnd();
        retrievedMessage.Complete();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
        retrievedMessage.Abandon();
    }
}

错误在

的“使用”行中被抛出
testQueueReceiver.Receive(...);

服务器拒绝了升级请求。 400 此端点仅用于 web-socket 请求

我在网上找不到任何东西,除了一篇似乎暗示这是防火墙/端口问题的帖子。我在本地打开了所有 azure 服务总线端口(9350-9354、80、443)出站,但 9000 有可能在防火墙处被阻止。它应该需要这些吗?任何指针将不胜感激!

Service MessagingCommunication Exception - The End point is only for web socket requests

【问题讨论】:

    标签: c# azure azureservicebus


    【解决方案1】:

    我只是想知道你为什么不使用OnMessage 而不是轮询队列?

           var connectionString = "";
           var queueName = "samplequeue";
    
           var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
    
           client.OnMessage(message =>
           {
             Console.WriteLine(String.Format("Message body: {0}", message.GetBody<String>()));
             Console.WriteLine(String.Format("Message id: {0}", message.MessageId));
             message.Complete()
           });
    

    【讨论】:

    • 此代码是 CRM 插件的一部分。我相信 CRM 插件只有 2 分钟的 TTL。虽然它不适合订阅模式,但我们基本上必须轮询队列。但是,使用您的方法,我确实得到了完全相同的错误。
    • 如您所说,您在本地打开端口 9354,但仍有可能被防火墙阻止。可以尝试在防火墙上打开端口吗?
    • 我有 9354 出站允许通过防火墙和本地相同的错误:-(
    • 现阶段是否可以在本地打开这个列表blogs.msdn.microsoft.com/brunoterkaly/2012/02/07/azure-ports中的所有端口,看看是否有帮助?然后关闭不需要的端口。干杯。
    【解决方案2】:

    由于一些代理问题,此问题已得到修复。

    运行代码的帐户是异步服务。我需要以该帐户登录,打开 IE 并转到连接(LAN)并删除代理复选框(自动检测设置等)。完成此操作后,代码绕过代理并正常工作。

    【讨论】:

      猜你喜欢
      • 2020-05-03
      • 1970-01-01
      • 2017-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多