我正在尝试让 session 在以下架构中工作。
- 多个异构辅助角色,用于监视和处理来自队列 1 的请求,并将其响应发送到队列 2。
- 一个前端 Web 角色,通过 REST 或 SOAP 接收来自外部的请求,将它们提交到队列 1 中,并等待队列 2 的响应。收到后,响应将返回给调用者。
Web 角色的作用是利用可扩展性,并允许在负载过高时动态创建辅助角色(这就是为什么整个 Ruth Goldberg 机器都离不开服务总线)。
我正在使用以下电话:
MessageSession sess = myQueueClient.AcceptMessageSession(mySessionId, TimeSpan.FromSeconds(timeoutPerSec));
接下来是:
BrokeredMessage bm = sess.Receive();
并且对 AcceptMessageSession
的调用崩溃并烧毁,但出现以下异常:
BR0012无法在不需要 session 的实体上创建 session 消息接收器。创建队列或订阅时确保将 RequiresSession 设置为 true 以启用 session 行为。
现在我将 RequiresSession 设置为 true:
if (!_queueManager.QueueExists(clientID))
_queueManager.CreateQueue(clientID).RequiresSession = true;
else
_queueManager.GetQueue(clientID).RequiresSession = true;
但这没有帮助。
我做错了什么?
最佳答案
创建队列时,您必须在 QueueDescription
中(而不是在 QueueDescription)中将
。RequiresSession
设置为 true
来创建队列已创建队列的
因此,在您的情况下,队列创建应类似于以下内容:
if (!_queueManager.QueueExists(clientID))
{
QueueDescription queueDescription = new QueueDescription(clientID)
{
RequiresSession = true
};
_queueManager.CreateQueue(queueDescription);
}
关于session - 在同步请求-响应模式中使用 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26944293/