2014-03-25 89 views
1

我有一個CloudQueue的Windows Azure隊列。我使用queue.GetMessage從隊列中檢索消息,但它返回null。Windows Azure隊列GetMessage返回null

我初始化我的隊列如下:

var setting = CloudConfigurationManager.GetSetting("DataConnectionString"); 
var storageAccount = CloudStorageAccount.Parse(setting); 
var queueClient = storageAccount.CreateCloudQueueClient(); 
var queue = queueClient.GetQueueReference(RoleEnvironment.GetConfigurationSettingValue("QueueName")); 
queue.CreateIfNotExists(); 

之後,我添加CloudQueueMessage在該隊列是這樣的:

CloudQueueMessage msg = new CloudQueueMessage(content);  
queue.AddMessage(msg); 

當我檢查的消息數:

queue.FetchAttributes(); 
int? count = queue.ApproximateMessageCount; //returns 1 

我得到的數量等於1,但是當我試圖得到消息:

var retrievedMsg = queue.GetMessage(); // returns null 

我有retrievedMsgnull

我很困惑。在這種方法中,我沒有代碼。但每次我檢索到的消息都是空的。

任何想法?

+0

這很奇怪!當沒有消息要出隊時,你會得到空值。您使用的是哪個版本的存儲客戶端庫?這是針對雲存儲帳戶還是本地存儲帳戶(模擬器版本)? –

+0

我已經使用了Windows Azure版本2.2,所以Microsoft.VindowsAzure.Storage版本3.0.3.0,Windows Azure模擬器版本是2.2。但是要提到的是,我從V1.7升級Windows Azure後出現這個bug。升級時我採用一些代碼。但我沒有其他問題,但這。 –

+2

託管您的代碼的角色是單個實例嗎?如果它被配置爲有2個或更多的實例,它可能就是那個隊列。如果你正在調用的實例中有一個實例到達它,那麼它將被其中一個實例觸及。 –

回答

0

入門的另一種選擇是從可以正常工作的代碼開始,然後我們可以反向工作。安裝最新的Azure SDK(2.5),它將直接在VS中安裝一些快速入門。從VS選擇文件/新建/項目/雲/ Azure存儲隊列。然後更新app.config文件以指向您的服務帳戶。確認工作。那麼它就是你的代碼或其他環境問題(多讀者等)。