Невозможно отфильтровать сообщения темы служебной шины с помощью SqlFilter

Я подписался на тему, и отправитель устанавливает две UserProperties «Classification» и «SubClassification». Я хочу фильтровать сообщения с классификацией, установленной на 1. Я попытался добавить следующий SqlFilter.

SqlFilter ("Классификация = '1'")

Не работает. Я по-прежнему получаю все сообщения независимо от свойства «Классификация».

Я использую клиент подписки из пространства имен Microsoft.Azure.ServiceBus.


comment
Вы проверили, что для этой подписки нет правила по умолчанию? Он создается по умолчанию. Поделитесь кодом, который вы используете для создания подписки.   -  person Sean Feldman    schedule 16.11.2018


Ответы (2)


Вам не нужно использовать SqlFilter() внутри правила. Просто установите его как Classification='1', чтобы фильтровать сообщения.

person Arunprabhu    schedule 16.11.2018
comment
Это все еще использует фильтр SQL ???? - person Sean Feldman; 16.11.2018

Попробуйте это для отладки: (изначально он всегда будет соответствовать, но затем вы избавитесь от

OR 1=1

после того, как все заработало. .

RuleDescription rd = new RuleDescription();
rd.Filter = new SqlFilter("CustomProperty = '1' OR 1=1");

Затем вы можете настроить синтаксический сахар по мере необходимости.

https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.sqlfilter?view=azure-dotnet

Вы должны показать СВОЙ код о том, как вы создаете подписку. Ниже приведен код .. в качестве примера:

NamespaceManager nsm = /* outside of scope of this question */
SubscriptionDescription currentSubscriptionDescription = new SubscriptionDescription("MyTopicPath", "MySubscriptionName");
currentSubscriptionDescription.AutoDeleteOnIdle = false;
SubscriptionDescription postCreateSd = nsm.CreateSubscription(currentSubscriptionDescription);


/* now tweak it */
MessagingFactory mf = /* outside of scope of this question */
SubscriptionClient subClient = mf.CreateSubscriptionClient("MyTopicPath", "MySubscriptionName");
RuleDescription rd = new RuleDescription();
rd.Filter = new SqlFilter("CustomProperty = '1' OR 1=1");
subClient.AddRule(rd);
person granadaCoder    schedule 20.08.2019