2014-12-18 3 views
0

Я написал код для удаления тестовых сообщений с темы служебной шины. Я единственный, кто использует эту тему. Он использует режим ReceiveAndDelete, поэтому я предполагаю, что он удалит их, но каждый раз, когда я запускаю код, он проходит через этот цикл приема сообщений, поэтому я знаю, что он не удаляет их. Что я делаю не так?служебная шина azure хранит сообщения после получения их

public void TruncateTopic() 
    { 
     // reset topic for testing.. 
     SubscriptionClient client = SubscriptionClient.CreateFromConnectionString(
      connStr, QUEUENAME, "AllMessages",ReceiveMode.ReceiveAndDelete); 
     BrokeredMessage message = client.Peek(); 
     while (message != null) 
     { 
      client.Receive(); 
      message = client.Peek(); 
     } 
     client.Close(); 

    } 
+0

Если я использую режим приема по умолчанию (peeklock), я могу Завершить() сообщение, и оно, кажется, удаляет. Но, безусловно, режим ReceiveAndDelete должен удаляться после получения, как в документации Microsoft. – effayqueue

ответ

1

В вашем коде вы только делаете Peek по теме/очереди. Действие Peek никогда не удаляет сообщения.

Как вы можете ясно read from documentation Peek method только peeks в подписку без фактического receiving сообщение.

ReceiveAndDelete режим приема будет работать, если вы не только Peek сообщения, а Receive их вместо этого! Вот почему он называется ReceiveAndDelete, но не PeekAndDelete.

Изменить код:

BrokeredMessage message = client.Receive(); 
    while (message != null) 
    { 
     message = client.Receive(); 
    } 

И все будет хорошо.

+0

он принимает. это строка client.Receive(); – effayqueue