分享方式:


導致 Azure 雲端服務 (傳統) 角色重新啟動的常見問題

這很重要

截至 2024 年 9 月 1 日,所有客戶的雲端服務 (傳統) 均已淘汰。 從 2024 年 10 月開始,Microsoft 將停止並關閉任何現有的執行中部署,且資料將會永久遺失。 新的部署應該使用新的 Azure Resource Manager 型部署模型 Azure 雲端服務(外延支援)。

本文討論部署問題的常見原因,和可協助您解決這些問題的疑難排解秘訣。 應用程式出現問題的徵候之一,是角色執行個體無法啟動,或是在初始化中、忙碌和停止中狀態之間循環。

缺少執行階段相依性

如果應用程式中的角色依賴任何不屬於 .NET Framework 或 Azure 受控程式庫的組件,您必須明確地在應用程式套件中包含該組件。 請記住,其他 Microsoft 架構依預設並未在 Azure 上提供。 如果您的角色依賴這類架構,您必須將這些組件新增至應用程式封裝。

在建置及封裝應用程式之前,請先驗證以下陳述是否正確:

  • 如果使用 Visual Studio,請確定專案中不屬於 Azure SDK 或 .NET Framework 之每個參考元件的 Copy Local 屬性設定為 True
  • 確定 web.config 檔案未參考 compilation 元素中任何未使用的組件。
  • 每個 .cshtml 檔案的 [建置動作] 都設為 [內容]。 此設定可確保檔案會正確出現在套件中,並且讓其他參考的檔案出現在套件中。

組件以錯誤的平台作為目標

Azure 是 64 位元環境。 因此,針對 32 位元目標編譯的 .NET 組件與 Azure 不相容。

角色在初始化或停止時會擲回未處理的例外狀況

RoleEntryPoint 類別的方法擲回的任何例外狀況,包括 OnStartOnStopRun 方法,都是未處理的例外狀況。 如果其中有一個方法發生未處理的例外狀況,則角色執行個體將重啟。 如果角色重複循環,它可能會在每次嘗試啟動時拋出未處理的例外狀況。

角色從 Run 方法返回

Run 方法的目的是無限期執行。 如果您的程式代碼覆寫 Run 方法,它應該會無限等待。 如果 Run 方法傳回,角色會回收。

不正確的 DiagnosticsConnectionString 設定

如果應用程式使用 Azure 診斷,則您的服務組態檔必須指定 DiagnosticsConnectionString 組態設定。 此設定應指定您在 Azure 中的儲存體帳戶的 HTTPS 連線。

為了在您將應用程式套件部署至 Azure 之前確保 DiagnosticsConnectionString 設定正確無誤,請先驗證以下陳述是否正確:

  • DiagnosticsConnectionString 設定指向 Azure 中的有效儲存體帳戶。
    根據預設,此設定會指向模擬儲存體帳戶,因此您必須在部署應用程式封裝之前明確變更這項設定。 若未變更此設定,當角色執行個體嘗試啟動診斷監視器時,將會擲回例外狀況。 此事件可能會導致角色執行個體無限期地回收。
  • 連接字串是以下列 格式指定。 (通訊協定必須指定為 HTTPS。)以您的儲存體帳戶名稱取代 MyAccountName,並以您的存取金鑰取代 MyAccountKey
DefaultEndpointsProtocol=https;AccountName=MyAccountName;AccountKey=MyAccountKey

如果您使用 Azure Tools for Microsoft Visual Studio 開發應用程式,您可以使用屬性頁面來設定此值。

匯出的憑證未包含私密金鑰

若要在傳輸層安全性 (TLS) 下執行 Web 角色,您必須確定匯出的管理憑證包含私密金鑰。 如果您使用「Windows 憑證管理員」匯出憑證,請務必針對 [匯出私密金鑰] 選項選取 [是]。 憑證必須匯出為 .pfx 格式,這是目前唯一支援的格式。

後續步驟

檢視更多雲端服務的 疑難解答文章

凱文·威廉姆森的部落格系列中,檢視更多角色回收案例。