C# 如何基于BrokeredMessage类的内置属性筛选ServiceBus主题订阅?
使用2012年6月的Azure SDK,我有一个服务总线主题,我正在向它添加订阅 我想筛选该订阅。如果我是根据我添加到BrokeredMessage属性包中的一个项目来执行此操作的,那么这可以正常工作:C# 如何基于BrokeredMessage类的内置属性筛选ServiceBus主题订阅?,c#,azure,publish-subscribe,servicebus,C#,Azure,Publish Subscribe,Servicebus,使用2012年6月的Azure SDK,我有一个服务总线主题,我正在向它添加订阅 我想筛选该订阅。如果我是根据我添加到BrokeredMessage属性包中的一个项目来执行此操作的,那么这可以正常工作: // Send the message: BrokeredMessage message = new BrokeredMessage(serializableObject); message.Properties.Add("MySessionId", "GUID"); getTopicClien
// Send the message:
BrokeredMessage message = new BrokeredMessage(serializableObject);
message.Properties.Add("MySessionId", "GUID");
getTopicClient("MY_TOPIC").Send(message); // method creates client. omitted here.
// Retrieve it:
SqlFilter myFilter = new SqlFilter(@"(MySessionId = ""GUID"")");
namespaceManager.CreateSubscription("MY_TOPIC", "MY_SUB", myFilter);
SubscriptionClient client = getSubscriptionClient("MY_TOPIC", "MY_SUB"); // method creates client. omitted here.
// This will work fine:
Message newMessage = client.Receive();
但是,如果我也这样做,但将筛选器值添加到BrokeredMessage对象的一个直接属性(如SessionId),则此操作失败:
// Send the message:
BrokeredMessage message = new BrokeredMessage(serializableObject);
message.SessionId = "GUID";
getTopicClient("MY_TOPIC").Send(message); // method creates client. omitted here.
// Retrieve it:
SqlFilter myFilter = new SqlFilter(@"(SessionId = ""GUID"")");
namespaceManager.CreateSubscription("MY_TOPIC", "MY_SUB", myFilter);
SubscriptionClient client = getSubscriptionClient("MY_TOPIC", "MY_SUB"); // method creates client. omitted here.
// This will never receive a message
Message newMessage = client.Receive();
如何构造一个SqlFilter来处理BrokeredMessage对象的内置属性(SessionId、ReplyToSessionId或MessageId)
这可能吗?SQL筛选器中的属性表达式实际上有作用域前缀。您通常看不到它们,因为对于用户定义的属性,默认值为“user”。您可以通过前缀“sys”来获取系统属性 请参见此处的语法描述;查找“范围”