Azure、SubscriptionClient.OnMessage 和会话

Azure, SubscriptionClient.OnMessage, and Sessions

Azure 服务总线订阅客户端是否支持在订阅需要会话时使用 OnMessage 操作的功能?

我有一个订阅,名为 "TestSubscription"。它需要一个 sessionId 并包含由 SessionId 绑定在一起的多部分数据。

if (!namespaceManager.SubscriptionExists("TestTopic", "Export"))
{
    var testRule = new RuleDescription
    {
        Filter = new SqlFilter(@"(Action='Export')"),
        Name = "Export"
    };

var subDesc = new SubscriptionDescription("DataCollectionTopic", "Export")
{
    RequiresSession = true
};
namespaceManager.CreateSubscription(sub`enter code here`Desc, testRule);
}

在一个单独的项目中,我有一个 Service Bus Monitor 和 WorkerRole,在 Worker Role 中,我有一个 SubscriptionClient,名为 "testSubscriptionClient":

testSubscriptionClient = SubscriptionClient.CreateFromConnectionString(connectionString, _topicName, CloudConfigurationManager.GetSetting("testSubscription"), ReceiveMode.PeekLock);

然后我希望在将新项目放入服务总线队列时触发 OnMessage:

testSubscriptionClient.OnMessage(PersistData);

然而,当我 运行 代码时,我收到以下消息:

InvalidOperationException:需要会话的实体不可能创建非会话消息接收器

我正在使用 Azure SDK v2.8。

我想做的事情可行吗?我是否需要在我的服务总线监视器、订阅客户端或其他地方进行特定设置,以便让我以这种方式从订阅中检索消息。作为旁注,这种方法在我没有使用会话数据的其他情况下非常有效。

你能试试这个代码吗:

var messageSession=testSubscriptionClient.AcceptMessageSession();

messageSession.OnMessage(PersistData);

除此之外:

testSubscriptionClient.OnMessage(PersistData);

编辑: 此外,您可以注册您的处理程序来处理会话 (RegisterSessionHandler)。它会触发您的每个新动作。

我觉得这个更适合你的问题

他在这 article 中展示了两种方式。它用于队列,但我认为您也可以将其应用于主题。