如何根据BrokeredMessage类的内置属性过滤ServiceBus主题订阅?

Jud*_*her 12 c# servicebus azure publish-subscribe

使用2012年6月的Azure SDK,我有一个服务总线主题,我正在添加订阅.

我想过滤该订阅.如果我根据我添加到BrokeredMessage Properties包中的一个项目执行此操作,那么这样可以正常工作:

// 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();
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做,但是将过滤器值添加到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();
Run Code Online (Sandbox Code Playgroud)

如何构造一个SqlFilter来解决BrokeredMessage对象的内置属性(SessionId,或ReplyToSessionId,还是MessageId?

这甚至可能吗?

Cle*_*ers 20

SQL过滤器中的属性表达式实际上具有作用域前缀.您通常看不到它们,因为默认为"用户".用于用户定义的属性.您可以通过前缀"sys"来获取系统属性.

请参阅此处的语法说明 寻找'范围' http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.servicebus.messaging.sqlfilter.sqlexpression.aspx