導致 Azure 雲端服務 (傳統) 角色回收的常見問題
重要
截至 2024 年 9 月 1 日,所有客戶的雲端服務 (傳統) 均已淘汰。 自 2024 年 10 月起,Microsoft 將停止並關閉任何執行中的現有部署,且資料將永久遺失。 新部署應該使用 Azure Resource Manager 型的新部署模型 Azure 雲端服務 (延伸支援)。
本文討論部署問題的常見原因,和可協助您解決這些問題的疑難排解秘訣。 應用程式出現問題的徵候之一,是角色執行個體無法啟動,或是在初始化中、忙碌和停止中狀態之間循環。
若本文中未提及您的 Azure 問題,請前往 Microsoft Q & A 及 Stack Overflow 上的 Azure 論壇。 您可以在這些論壇中張貼您的問題,或將問題貼到 Twitter 上的 @AzureSupport。 您也可以提交 Azure 支援要求。 若要提交支援要求,請在 Azure 支援頁面上,選取 [取得支援]。
遺失執行階段相依性
如果應用程式中的角色依賴任何不屬於 .NET Framework 或 Azure 受控程式庫的組件,您必須明確地在應用程式套件中包含該組件。 請記住,其他 Microsoft 架構依預設並未在 Azure 上提供。 如果您的角色依賴這類架構,您必須將這些組件新增至應用程式封裝。
在建置及封裝應用程式之前,請先驗證以下陳述是否正確:
- 如果使用 Visual studio,請確定您不屬於 Azure SDK 或 .NET Framework 的專案中每個參考的組件,[複製到本機] 屬性都設定為 [True]。
- 確定 web.config 檔案未參考 compilation 元素中任何未使用的組件。
- 每個 .cshtml 檔案的 [建置動作] 都設為 [內容]。 此設定可確保檔案會正確出現在套件中,並且讓其他參考的檔案出現在套件中。
組件以錯誤的平台作為目標
Azure 是 64 位元環境。 因此,針對 32 位元目標編譯的 .NET 組件與 Azure 不相容。
角色在初始化或停止時會擲回未處理的例外狀況
RoleEntryPoint 類別的方法 (包括 OnStart、OnStop 和 Run) 方法所擲回的任何例外狀況,都是未處理的例外狀況。 如果其中有一個方法發生未處理的例外狀況,則角色將回收。 如果角色重複回收,它可能會在每次嘗試啟動時擲回未處理的例外狀況。
角色因 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 格式,這是目前唯一支援的格式。
下一步
檢視更多雲端服務的 疑難排解文章 。
在以下位置檢視多個角色回收案例: Kevin Williamson 的部落格系列。