2014-03-28 49 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