2014-11-11 2 views
3

Я пытаюсь получить сообщения в пакете из ServiceBus с использованием метода ReceiveBatch в MessageReceiver:MessageReceiver.ReceiveBatch() не работает, как предполагалось

IEnumerable<BrokeredMessage> messages; 
var messagingfactory = MessagingFactory.CreateFromConnectionString("ConnectionString"); 
var msgrcvr = messagingfactory.CreateMessageReceiver("queueName", ReceiveMode.ReceiveAndDelete); 
messages = msgrcvr.ReceiveBatch(20, timeoutInSecs); 

Я проверил, что моя очередь содержит 20 сообщений с помощью службы Проводник автобусов.

Этот код возвращает только сообщение в структуре сообщений. Есть ли какая-то собственность, которой я не хватает?

+0

У меня есть аналогичный вопрос; Я получаю случайное число, а не * все * из них; см. http://stackoverflow.com/questions/28988477/brokeredmessage-microsoft-service-bus-queue-receivebatch-not-obtaining-all-dead – JosephDoggie

+0

Вы когда-нибудь находили ответ? – JosephDoggie

+0

Кто-нибудь знает, как сообщить об этой ошибке Microsoft; Я попытался, но не смог найти доступную ссылку. – JosephDoggie

ответ

0

Это только частичный ответ или обход; следующий код надежно получает все элементы, но не использует «ReceiveBatch»; обратите внимание, насколько я могу различить, Peek (i) работает с одним индексом. Кроме того: в зависимости от того, какой сервер работает, если вы заряжаетесь притяжением сообщения, это может быть (или не обязательно) более дорогостоящим, поэтому используйте на свой страх и риск:

 List<BrokeredMessage> dlIE = new List<BrokeredMessage>(); 

     BrokeredMessage potentialMessage = null; 
     int loopCount = 1; 
     while ((potentialMessage = deadletterSubscriptionClient.Peek(loopCount)) != null) 
     { 
      dlIE.Add(potentialMessage); loopCount++; 
     } 
+0

Если у кого-то есть лучший ответ, как использовать ReceiveBatch напрямую, отправьте сообщение. – JosephDoggie

+0

также жаль, что нелегко сообщить, что кажется неподдельной ошибкой Microsoft более очевидным, легким способом! – JosephDoggie

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