Azure Service Bus MessageReceiver Receive() web sockets error

久未见 提交于 2019-12-12 03:34:16

问题


I am working with a c# program within my network and am able to post messages to an Azure Service Bus queue. When receiving them, I get an exception on MessageReceiver.Receive(). The code and error is below;

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

The error gets thrown on the 'using' line at

testQueueReceiver.Receive(...);

The server rejected the upgrade request. 400 This endpoint is only for web-socket requests

I can't find anything on the web with the exception of one post which seems to suggest it is a firewall / ports issue. I have all the azure service bus ports outbound open (9350-9354, 80, 443) locally but there is a chance the 9000's are blocked at the firewall. Should it require these? Any pointers would be greatly appreciated !

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


回答1:


I'm just wondering why don't you use OnMessage instead of polling the queue?

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



回答2:


This was fixed due to some proxy issues.

The account that the code was running under was an async service. I needed to log in as that account, open IE and go to connections (LAN) and remove the proxy checkboxes (detect settings automatically, etc). Once this was done, the code bypassed the proxy and worked fine.



来源:https://stackoverflow.com/questions/42527865/azure-service-bus-messagereceiver-receive-web-sockets-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!