12

2012年6月のAzureSDKを使用して、サービスバスのトピックがあり、それにサブスクリプションを追加しています。

そのサブスクリプションをフィルタリングしたいと思います。BrokeredMessageプロパティバッグに追加したアイテムの1つに基づいてこれを行うと、これは正常に機能します。

// 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オブジェクトの直接プロパティの1つにフィルター値を追加すると、失敗します。

// 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、またはMessageId)をアドレス指定するSqlFilterを構築するにはどうすればよいですか?

これも可能ですか?

4

1 に答える 1

20

SQL フィルターのプロパティ式には、実際にはスコープ プレフィックスがあります。デフォルトは「ユーザー」であるため、通常は表示されません。ユーザー定義のプロパティ用。「sys」を前に付けることで、システム プロパティを取得できます。

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

于 2012-08-28T16:58:31.793 に答える