Session 在同步请求-响应模式中使用会话

Session 在同步请求-响应模式中使用会话,session,azure,servicebus,azureservicebus,Session,Azure,Servicebus,Azureservicebus,我试图让会话在以下体系结构中工作 多个异构工作角色,用于监视和处理来自queue1的请求,并将其响应发送到queue2 一个前端web角色通过REST或SOAP接收来自外部的请求,将它们提交到queue1,并等待queue2的响应。收到响应后,将其返回给调用者 web角色的存在是为了利用可伸缩性,并允许在负载过高时动态创建工作者角色(这就是为什么整个Ruth Goldberg机器没有服务总线是不可能的) 我正在使用呼叫: MessageSession sess=myQueueClient.A

我试图让会话在以下体系结构中工作

  • 多个异构工作角色,用于监视和处理来自queue1的请求,并将其响应发送到queue2
  • 一个前端web角色通过REST或SOAP接收来自外部的请求,将它们提交到queue1,并等待queue2的响应。收到响应后,将其返回给调用者
web角色的存在是为了利用可伸缩性,并允许在负载过高时动态创建工作者角色(这就是为什么整个Ruth Goldberg机器没有服务总线是不可能的)

我正在使用呼叫:

MessageSession sess=myQueueClient.AcceptMessageSession(mySessionId,TimeSpan.FromSeconds(timeoutPerSec))

然后是:

BrokeredMessage bm=sess.Receive()

AcceptMessageSession
的调用崩溃并烧毁,但出现以下异常:

BR0012A无法在不需要会话的实体上创建会话式消息接收器。创建队列或订阅以启用会话行为时,请确保将RequiresSession设置为true。

现在我将Requiresession设置为true:

        if (!_queueManager.QueueExists(clientID))
            _queueManager.CreateQueue(clientID).RequiresSession = true;
        else
            _queueManager.GetQueue(clientID).RequiresSession = true;
但这没有帮助


我做错了什么

创建队列时,您必须在
QueueDescription
中创建一个
RequiresSession
设置为
true
的队列,而不是在已创建队列的
QueueDescription

因此,您在创建队列时应与以下内容类似:

    if (!_queueManager.QueueExists(clientID))
    {
        QueueDescription queueDescription = new QueueDescription(clientID)
        {
            RequiresSession = true
        };
        _queueManager.CreateQueue(queueDescription);
    }