簡體   English   中英

Windows Azure隊列 - CloudQueue.GetMessage()不適用於最新版本的Microsoft.WindowsAzure.Storage(v5.0.0)

[英]Windows Azure Queue - CloudQueue.GetMessage() not working for latest version of Microsoft.WindowsAzure.Storage (v5.0.0)

我是Azure的新手, 在這里嘗試教程。

本教程是關於在Azure上創建Cloud Service,利用Web角色委派任務到Worker Role。 唯一重要的部分; 當用戶將圖像上載到Web角色時,Web角色會將圖像放入Azure存儲中,並使用包含存儲圖像的URL的字段在數據庫中創建新記錄。 Web角色接下來在Azure隊列中放置一條消息(新添加的記錄的ID)。

var queueMessage = new CloudQueueMessage(id);
await _cloudQueue.AddMessageAsync(queueMessage);

然后,Worker Role將從隊列中檢索消息。 接下來,從數據庫中檢索記錄。 然后從檢索到的數據庫記錄的圖像URL創建縮略圖。

while (true) {
    var msg = _cloudQueue.GetMessage();
    if (msg != null) {
        CreateThumbnail();
    }

    System.Threading.Thread.Sleep(1000);
}

本教程提供了指導

  1. 下載解決方案源文件並從Visual Studio打開
  2. 或使用Visual Studio從頭開始創建解決方案

使用下載的源文件時,該解決方案工作正常。 在Worker Role中, var msg = _cloudQueue.GetMessage();

msg總是有東西(不是null),雖然上傳圖像后會有3到4秒的延遲。 因此,在上傳圖像后3到4秒始終執行CreateThumbnail()

但是,如果我從頭開始創建解決方案,無論我等待多長時間並且從未執行過CreateThumbnailmsg始終為null。 我通過在這里和那里放置斷點來確保工作者角色確實在運行。

問題的根源

經過幾個艱苦的工作,我把問題歸結為程序集Microsoft.WindowsAzure.Storage 從教程頁面下載的解決方案源文件使用的是3.2.0版本,而從頭開始創建的解決方案使用的是NuGet的最新版本5.0.0。 所以按順序說,如果我在Worker Role上使用最新的5.0.0版本的Microsoft.WindowsAzure.Storagemsg總是為null。 這是一個已知問題還是我遺漏了一些東西。

對不起,你很難讓這個教程發揮作用。 我已經與教程的所有者核實了,並且最近更新了(大約9/1)。 請下載新版本的Visual Studio解決方案並再次嘗試。

有幾點需要注意,本教程的故障排除部分對此進行了概述:

  • 將啟動項目更改為ContosoAdsCloudService
  • 以管理員身份運行Visual Studio,並指定解決方案應使用完整計算模擬器而不是快速模擬器運行。

從教程:

默認情況下,新的雲服務項目使用Azure計算模擬器來模擬Azure環境。 這是完整計算模擬器的輕量級版本,在某些情況下,當快速版本沒有時,完整模擬器將起作用。

若要更改項目以使用完整模擬器,請右鍵單擊ContosoAdsCloudService項目,然后單擊“屬性”。 在“屬性”窗口中,單擊“Web”選項卡,然后單擊“使用完全模擬器”單選按鈕。

要使用完整模擬器運行應用程序,必須使用管理員權限打開Visual Studio。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM