2014-03-28 43 views
1

Hy,Windows Service Bus接收函數64位int

我想在C#中使用ReceiveBatch-Methode(IEnumerable(Int64))。它需要一個IEnumerable(Int64 - > long)。我需要這個函數,因爲在GetMessageNumber(topicName,subscriptionName)函數中,我使用來自服務總線的內部計數器,並返回一個長整型值。另一個接收函數只提供一個int。我試過這個函數,但我總是得到一個MessageNotFoundException被用戶代碼取消。

無法鎖定至少一條指定的消息。該消息是不是 vorhanden..TrackingId:a2e6b0f0-fd3d-4594-935d-936ff7b3210c_GLBHPC0474_BLBHPC0474,時間戳:2014年3月28日13時41分57秒

http://msdn.microsoft.com/de-de/library/jj657801.aspx

 IEnumerable<long> messageNumber = new long[] 
     { 
      GetMessageNumber(topicName, subscriptionName) 
     }; 

     IEnumerable<BrokeredMessage> messages = null; 

      try 
      { 
       //Receives a message using the InternalReceiver. 
       messages = subscriptionClient.ReceiveBatch(messageNumber); 

但是我試了一下與int函數ReceiveBatch-Methode(Int32),它的工作。問題是我需要具有較長值的函數,以及爲什麼他們使用IEnumerable來使用具有64位值的接收函數?我如何完成使用64位值的函數是正確的?

 IEnumerable<BrokeredMessage> messages = null; 

     long messageNumber = GetMessageNumber(topicName, subscriptionName); 

      try 
      { 
       //Receives a message using the InternalReceiver. 
       messages = subscriptionClient.ReceiveBatch(messageNumber); 

此致

回答

2

ReceiveBatch(maxMessageCount)API是用於獲取下一批次,其中返回的消息的數目被限制爲最多到maxMessageCount值消息。當你使用「MessageNumber」時,你是否以某種方式暗示消息的ID?這不是ReceveBatch所要做的。如果您可以澄清情況,那麼我們可以提供更多指導。

+0

Hy, 謝謝你的回答。 Messagenumber僅獲取消息的總數,因此GetMessageNumber(topicName,subscriptionName)函數使用以下代碼:QueueDescription queue = GetQueue(queueName); long messageCount = queue.MessageCount;' – user2644964

+0

我想完成的是,我可以在讀取模式下從隊列中獲取所有消息,因此消息應該保留在隊列中,我不想刪除它們。接收所有使用ReceiveBatch函數的消息。要知道我使用上述函數的消息數量,但MessageCount返回一個long值,對於ReceiveBatch,我只能使用int。 – user2644964