2016-12-19 2 views
0

Я конвертирую приложение, которое использует MSMQ для использования интерфейса с адаптерами, чем может обрабатывать либо MSMQ, либо служебную шину (либо на премьере, либо в лазурных версиях). Одним из способов использования MSMQ приложения была функция инспектора конфигурации, чтобы определить, что система имеет соответствующие привилегии для выполнения определенных действий. Он использует System.Messaging.MessageQueue.CanRead, чтобы убедиться, что мы можем успешно прочитать заданную очередь, которая важна для приложения (это была частая ошибка конфигурации клиентов).Что такое служебная шина, эквивалентная CanMead MSMQ?

Лучший эквивалент в Service Bus для меня не ясен. Моя первая мысль о подходе состояла в том, чтобы попытаться выполнить QueueClient.Peek() и поймать любые последующие исключения. Метод Peek не предлагает параметр таймаута, поэтому я могу только надеяться, что это произойдет быстро. Я бы предпочел использовать таймаут, чтобы я мог заставить его быстро вернуться в вероятный сценарий, что в настоящее время нет сообщений для чтения. Существует Receive(TimeSpan serverWaitTime), где я могу пройти в крошечное время ожидания, но я думаю, что это потребует от меня использовать транзакцию и прервать ее, если я получаю сообщение. Это заблокировало бы очередь, когда я предпочел бы не делать этого.

Я надеюсь, что есть лучший вариант, который я пропустил.

+0

На данный момент такой функции нет. –

+1

Когда вы создаете ресивер, вам нужно указать строку подключения пространства имен + sas. Если вы предоставите ключ sas, который не разрешает разрешение на чтение в очереди, вы получите исключение – Thomas

+0

@Thomas, это сработало нормально. Если вы хотите включить его в качестве ответа, я отмечу его принятым. Извините за такой поздний ответ. – DannyMeister

ответ

0

Когда вы создаете MessageReceiver, вам нужно указать строку соединения пространства имен + sas. Если вы предоставили ключ sas, который не разрешает разрешение на чтение в очереди, вы получите исключение.

Смежные вопросы