Подтвердить что ты не робот

Как отфильтровать подписку на тему ServiceBus на основе встроенного свойства класса BrokeredMessage?

Используя июньский 2012 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();

Если, однако, я делаю то же самое, но добавляю значение фильтра к одному из прямых свойств объекта 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?

Возможно ли это?

4b9b3361

Ответ 1

В выражениях свойств в фильтрах SQL на самом деле есть префиксы для определения области охвата. Обычно вы их не видите, потому что по умолчанию "пользователь". для пользовательских свойств. Вы можете получить свойства системы, предварительно используя "sys".

См. описание синтаксиса здесь; искать 'scope' http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.servicebus.messaging.sqlfilter.sqlexpression.aspx