2012-08-28 3 views
11

2012年6月のAzure SDKを使用して、私はサービスバスに関するトピックを持っており、サブスクリプションを追加しています。BrokeredMessageクラスの組み込みプロパティに基づいてServiceBusトピックサブスクリプションをフィルタリングする方法はありますか?

そのサブスクリプションをフィルタリングします。私はBrokeredMessageプロパティバッグに追加した項目のいずれかに基づいてこれを行う場合、これは正常に動作します:

// 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(); 

場合は、しかし、私は同じことが、のいずれかにフィルタ値を追加しますなどのSessionIdとしてBrokeredMessageオブジェクトの直接プロパティ、これは失敗します。

// 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(); 

私は内蔵のBrokeredMessageオブジェクトのプロパティ(のSessionId、またはReplyToSessionId、またはメッセージId

に対処しますSqlFilterを構築できますか?

これも可能ですか?

答えて

18

SQLフィルタのプロパティ式には、実際にスコープ・プレフィックスがあります。デフォルトは「user」なので、通常は表示されません。ユーザー定義プロパティの場合接頭辞 "sys"でシステムのプロパティを取得できます。

ここで構文の説明を参照してください。 「スコープ」を探しますhttp://msdn.microsoft.com/en-us/library/windowsazure/microsoft.servicebus.messaging.sqlfilter.sqlexpression.aspx

+0

私が探していたものです。どうもありがとう! – JcFx

関連する問題