針對 Azure App Service 和 IIS 上的 ASP.NET Core 進行疑難排解
本文提供一般應用程式啟動錯誤的相關資訊,以及如何在應用程式部署至 Azure App 服務 或 IIS 時診斷錯誤的指示:
應用程式啟動錯誤
說明常見的啟動 HTTP 狀態碼案例。
針對Azure App 服務進行疑難排解
提供部署至Azure App 服務之應用程式的疑難排解建議。
針對 IIS 進行疑難排解
針對部署到 IIS 或在本機 IIS Express 上執行的應用程式提供疑難排解建議。 本指南同時適用于 Windows Server 和 Windows 桌面部署。
清除套件快取
說明在執行主要升級或變更套件版本時,當不一致套件中斷應用程式時,該怎麼做。
其他資源
列出其他疑難排解主題。
應用程式啟動錯誤
在 Visual Studio 中,ASP.NET Core 專案預設伺服器為 Kestrel 。 Visual Studio 可以設定為使用 IIS Express 。 502.5 - 進程失敗 或 500.30 - 使用 IIS Express 在本機偵錯時發生的啟動失敗 ,可以使用本主題的建議來診斷。
403.14 禁止
應用程式無法啟動。 記錄下列錯誤:
The Web server is configured to not list the contents of this directory.
錯誤通常是由主控系統上的部署中斷所造成,其中包括下列任何案例:
- 應用程式會部署到主控系統上的錯誤資料夾。
- 部署程式無法將所有應用程式的檔案和資料夾移至主控系統上的部署資料夾。
- 部署中遺漏 web.config 檔案,或 web.config 檔案內容格式不正確。
執行下列步驟:
- 從主控系統上的部署資料夾刪除所有檔案和資料夾。
- 使用您一般的部署方法,將應用程式的 publish 資料夾內容重新部署至主控系統,例如 Visual Studio、PowerShell 或手動部署:
- 確認 部署中有 web.config 檔案,且其內容正確無誤。
- 在 Azure App 服務 上裝載時,請確認應用程式已部署至
D:\home\site\wwwroot
資料夾。 - 當應用程式由 IIS 裝載時,請確認應用程式已部署至 IIS 管理員 的基本 設定 中顯示的 IIS 實體路徑 。
- 藉由比較主控系統上的部署與專案 發佈 資料夾的內容,確認已部署所有應用程式的檔案和資料夾。
如需已發佈 ASP.NET Core 應用程式佈建的詳細資訊,請參閱 ASP.NET Core 目錄結構 。 如需 web.config 檔案的詳細資訊 ,請參閱 適用于 IIS 的 ASP.NET Core Module (ANCM)。
500 內部伺服器錯誤
應用程式啟動,但有錯誤導致伺服器無法完成要求。
此錯誤是在啟動或建立回應時,在應用程式的程式碼內發生。 回應可能未包含任何內容,或是回應可能在瀏覽器中以「500 內部伺服器錯誤」的形式出現。 「應用程式事件記錄檔」通常會指出該應用程式已正常啟動。 從伺服器的觀點來看,這是正確的。 應用程式已啟動,但無法產生有效的回應。 請在伺服器上於命令提示字元中執行應用程式或啟用 ASP.NET Core 模組 stdout 記錄檔,以針對問題進行疑難排解。
安裝 .NET Core 裝載套件組合或損毀時,也可能會發生此錯誤。 安裝或修復 .NET Core 裝載套件組合 (適用于 IIS) 或 Visual Studio (適用于 IIS Express) 的安裝,可能會修正此問題。
500.0 同處理序處理常式載入失敗
背景工作處理序失敗。 應用程式未啟動。
載入 核心模組 元件 ASP.NET 發生未知的錯誤。 請採取下列其中一個動作:
- 連絡 Microsoft 支援服務 (依序選取 [開發人員工具] 和 [ASP.NET Core])。
- 在 Stack Overflow 上詢問問題。
- 在我們的 GitHub 存放庫提出問題。
500.30 同處理序啟動失敗
背景工作處理序失敗。 應用程式未啟動。
ASP.NET Core 模組 會嘗試啟動 .NET Core CLR 進程,但無法啟動。 通常從應用程式事件記錄檔和 ASP.NET Core 模組 stdout 記錄檔中的項目,即可判斷啟動失敗的原因。
常見失敗狀況:
- 應用程式設定錯誤,因為目標為不存在的 ASP.NET Core 共用架構版本。 請檢查安裝在目標機器上的 ASP.NET Core 共用架構版本為何。
- 使用 Azure 金鑰保存庫,缺少金鑰保存庫的許可權。 檢查目標金鑰保存庫中的存取原則,以確保授與正確的許可權。
500.31 ANCM 找不到原生相依性
背景工作處理序失敗。 應用程式未啟動。
ASP.NET Core 模組 會嘗試啟動 .NET Core 執行時間,但無法啟動。 此啟動失敗的最常見原因是當 Microsoft.NETCore.App
或 Microsoft.AspNetCore.App
執行階段未安裝時。 如果應用程式部署至目標 ASP.NET Core 3.0,但電腦上無該版本,就會發生此錯誤。 範例錯誤訊息如下:
The specified framework 'Microsoft.NETCore.App', version '3.0.0' was not found.
- The following frameworks were found:
2.2.1 at [C:\Program Files\dotnet\x64\shared\Microsoft.NETCore.App]
3.0.0-preview5-27626-15 at [C:\Program Files\dotnet\x64\shared\Microsoft.NETCore.App]
3.0.0-preview6-27713-13 at [C:\Program Files\dotnet\x64\shared\Microsoft.NETCore.App]
3.0.0-preview6-27714-15 at [C:\Program Files\dotnet\x64\shared\Microsoft.NETCore.App]
3.0.0-preview6-27723-08 at [C:\Program Files\dotnet\x64\shared\Microsoft.NETCore.App]
錯誤訊息會列出所有已安裝 .NET Core 版本和應用程式所要求的版本。 若要修正此錯誤,請使用以下其中一種方法:
- 在電腦上安裝適當的 .NET Core 版本。
- 將應用程式的目標 .NET Core 版本變更為電腦上版本。
- 將應用程式發佈為自封式部署。
在開發過程中執行時 (ASPNETCORE_ENVIRONMENT
環境變數設定為 Development
),特定的錯誤會寫入至 HTTP 回應。 處理序啟動失敗的原因也會列在應用程式事件記錄檔中。
500.32 ANCM 無法載入 dll
背景工作處理序失敗。 應用程式未啟動。
此錯誤最常見原因是針對不相容的處理器架構發佈應用程式。 如果背景工作處理序執行為 32 位元應用程式,而此應用程式已發佈至目標 64 位元,就會發生此錯誤。
若要修正此錯誤,請使用以下其中一種方法:
- 針對相同的處理器架構,將應用程式重新發佈為背景工作處理序。
- 將應用程式發佈為架構相依部署。
500.33 ANCM 要求處理常式載入失敗
背景工作處理序失敗。 應用程式未啟動。
應用程式未參考 Microsoft.AspNetCore.App
架構。 只有以架構為目標 Microsoft.AspNetCore.App
的應用程式可以由 ASP.NET Core 模組 裝載。
若要修正這個錯誤,請確認應用程式以 Microsoft.AspNetCore.App
架構為目標。 檢查 .runtimeconfig.json
以驗證應用程式是否以該架構為目標。
500.34 ANCM 不支援混合式裝載模型
背景工作處理序無法在相同的程序中執行同處理序應用程式和跨處理序應用程式。
若要修正這個錯誤,請在不同的 IIS 應用程式集區中執行應用程式。
500.35 ANCM 同一程序中有多個同處理序應用程式
背景工作進程無法在同一個進程中執行多個同進程應用程式。
若要修正這個錯誤,請在不同的 IIS 應用程式集區中執行應用程式。
500.36 ANCM 跨處理序處理常式載入失敗
跨處理序要求處理常式 aspnetcorev2_outofprocess.dll 不在 aspnetcorev2.dll 檔案旁邊。 這表示 ASP.NET 核心模組 的損毀安裝 。
若要修正這個錯誤,請修復 .NET Core 裝載套件組合 (適用於 IIS) 或 Visual Studio (適用於 IIS Express) 安裝。
500.37 ANCM 無法在啟動時間限制內啟動
ANCM 無法在提供的啟動時間限制內啟動。 根據預設,逾時值為 120 秒。
在同一部電腦上啟動大量的應用程式時,就會發生此錯誤。 檢查伺服器在啟動期間是否出現 CPU/記憶體的使用量尖峰。 多個應用程式的啟動程序可能需要交錯進行。
500.38 找不到 ANCM 應用程式 DLL
ANCM 找不到應用程式 DLL,該 DLL 應該位於可執行檔旁邊。
使用同進程裝載模型將應用程式封裝為單一 檔案可執行檔 時,就會發生此錯誤。 進程內模型需要 ANCM 將 .NET Core 應用程式載入現有的 IIS 進程。 單一檔案部署模型不支援此案例。 使用 應用程式專案檔中的下列其中一 種方法來修正此錯誤:
- 將 MSBuild 屬性設定為
false
,以PublishSingleFile
停用單一檔案發佈。 - 將 MSBuild 屬性
OutOfProcess
設定AspNetCoreHostingModel
為 ,以切換至跨進程裝載模型。
502.5 處理序失敗
背景工作處理序失敗。 應用程式未啟動。
ASP.NET Core 模組嘗試啟動背景工作處理序,但無法啟動。 通常從應用程式事件記錄檔和 ASP.NET Core 模組 stdout 記錄檔中的項目,即可判斷啟動失敗的原因。
因為目標 ASP.NET Core 共用架構的版本不存在,導致應用程式設定錯誤是常見的失敗狀況。 請檢查安裝在目標機器上的 ASP.NET Core 共用架構版本為何。 「共用的架構」是一組安裝於電腦上且由 Microsoft.AspNetCore.App
之類的中繼套件所參考的組件 (.dll 檔案)。 中繼套件參考可以指定最低必要版本。 如需詳細資訊,請參閱共用的架構 \(英文\)。
當裝載或應用程式設定錯誤造成背景工作處理序發生失敗時,會傳回 [502.5 處理序失敗] 錯誤頁面:
無法啟動應用程式 (ErrorCode '0x800700c1')
EventID: 1010
Source: IIS AspNetCore Module V2
Failed to start application '/LM/W3SVC/6/ROOT/', ErrorCode '0x800700c1'.
應用程式無法啟動,因為無法載入應用程式的組件 (.dll)。
當已發行的應用程式與 w3wp/iisexpress 處理序之間出現位元不符的情況時,就會發生此錯誤。
確認應用程式集區的 32 位元設定正確:
- 在 IIS 管理員的 [應用程式集區] 中,選取應用程式集區。
- 在 [動作] 面板中,選取 [編輯應用程式集區] 下的 [進階設定]。
- 設定 啟用 32 位應用程式 :
- 如果部署 32 位元 (x86) 應用程式,請將值設定為
True
。 - 如果部署 64 位元 (x64) 應用程式,請將值設定為
False
。
- 如果部署 32 位元 (x86) 應用程式,請將值設定為
確認專案檔中的 MSBuild 屬性與應用程式的已發佈位之間 <Platform>
沒有衝突。
無法啟動應用程式 (ErrorCode '0x800701b1')
EventID: 1010
Source: IIS AspNetCore Module V2
Failed to start application '/LM/W3SVC/3/ROOT', ErrorCode '0x800701b1'.
應用程式無法啟動,因為 Windows 服務無法載入。
需要啟用的一個常見服務是「Null」服務。
下列命令會啟用 null
Windows 服務:
sc.exe start null
### Connection reset
If an error occurs after the headers are sent, it's too late for the server to send a **500 Internal Server Error** when an error occurs. This often happens when an error occurs during the serialization of complex objects for a response. This type of error appears as a *connection reset* error on the client. [Application logging](xref:fundamentals/logging/index) can help troubleshoot these types of errors.
### Default startup limits
The [ASP.NET Core Module](xref:host-and-deploy/aspnet-core-module) is configured with a default *startupTimeLimit* of 120 seconds. When left at the default value, an app may take up to two minutes to start before the module logs a process failure. For information on configuring the module, see [Attributes of the aspNetCore element](xref:host-and-deploy/aspnet-core-module#attributes-of-the-aspnetcore-element).
## Troubleshoot on Azure App Service
[!INCLUDE [Azure App Service Preview Notice](~/includes/azure-apps-preview-notice.md)]
### Azure App Services Log stream
The Azure App Services Log streams logging information as it occurs. To view streaming logs:
1. In the Azure portal, open the app in **App Services**.
1. In the left pane, navigate to **Monitoring** > **App Service Logs**.

1. Select **File System** for **Web Server Logging**. Optionally enable **Application logging**.

1. In the left pane, navigate to **Monitoring** > **Log stream**, and then select **Application logs** or **Web Server Logs**.

The following images shows the application logs output:

Streaming logs have some latency and might not display immediately.
### Application Event Log (Azure App Service)
To access the Application Event Log, use the **Diagnose and solve problems** blade in the Azure portal:
1. In the Azure portal, open the app in **App Services**.
1. Select **Diagnose and solve problems**.
1. Select the **Diagnostic Tools** heading.
1. Under **Support Tools**, select the **Application Events** button.
1. Examine the latest error provided by the *IIS AspNetCoreModule* or *IIS AspNetCoreModule V2* entry in the **Source** column.
An alternative to using the **Diagnose and solve problems** blade is to examine the Application Event Log file directly using [Kudu](https://github.com/projectkudu/kudu/wiki):
1. Open **Advanced Tools** in the **Development Tools** area. Select the **Go→** button. The Kudu console opens in a new browser tab or window.
1. Using the navigation bar at the top of the page, open **Debug console** and select **CMD**.
1. Open the **LogFiles** folder.
1. Select the pencil icon next to the `eventlog.xml` file.
1. Examine the log. Scroll to the bottom of the log to see the most recent events.
### Run the app in the Kudu console
Many startup errors don't produce useful information in the Application Event Log. You can run the app in the [Kudu](https://github.com/projectkudu/kudu/wiki) Remote Execution Console to discover the error:
1. Open **Advanced Tools** in the **Development Tools** area. Select the **Go→** button. The Kudu console opens in a new browser tab or window.
1. Using the navigation bar at the top of the page, open **Debug console** and select **CMD**.
#### Test a 32-bit (x86) app
**Current release**
1. `cd d:\home\site\wwwroot`
1. Run the app:
* If the app is a [framework-dependent deployment](/dotnet/core/deploying/#framework-dependent-deployments-fdd):
```dotnetcli
dotnet .\{ASSEMBLY NAME}.dll
```
* If the app is a [self-contained deployment](/dotnet/core/deploying/#self-contained-deployments-scd):
```console
{ASSEMBLY NAME}.exe
```
The console output from the app, showing any errors, is piped to the Kudu console.
**Framework-dependent deployment running on a preview release**
*Requires installing the ASP.NET Core {VERSION} (x86) Runtime site extension.*
1. `cd D:\home\SiteExtensions\AspNetCoreRuntime.{X.Y}.x32` (`{X.Y}` is the runtime version)
1. Run the app: `dotnet \home\site\wwwroot\{ASSEMBLY NAME}.dll`
The console output from the app, showing any errors, is piped to the Kudu console.
#### Test a 64-bit (x64) app
**Current release**
* If the app is a 64-bit (x64) [framework-dependent deployment](/dotnet/core/deploying/#framework-dependent-deployments-fdd):
1. `cd D:\Program Files\dotnet`
1. Run the app: `dotnet \home\site\wwwroot\{ASSEMBLY NAME}.dll`
* If the app is a [self-contained deployment](/dotnet/core/deploying/#self-contained-deployments-scd):
1. `cd D:\home\site\wwwroot`
1. Run the app: `{ASSEMBLY NAME}.exe`
The console output from the app, showing any errors, is piped to the Kudu console.
**Framework-dependent deployment running on a preview release**
*Requires installing the ASP.NET Core {VERSION} (x64) Runtime site extension.*
1. `cd D:\home\SiteExtensions\AspNetCoreRuntime.{X.Y}.x64` (`{X.Y}` is the runtime version)
1. Run the app: `dotnet \home\site\wwwroot\{ASSEMBLY NAME}.dll`
The console output from the app, showing any errors, is piped to the Kudu console.
### ASP.NET Core Module stdout log (Azure App Service)
> [!WARNING]
> Failure to disable the stdout log can lead to app or server failure. There's no limit on log file size or the number of log files created. Only use stdout logging to troubleshoot app startup problems.
>
> For general logging in an ASP.NET Core app after startup, use a logging library that limits log file size and rotates logs. For more information, see [third-party logging providers](xref:fundamentals/logging/index#third-party-logging-providers).
The ASP.NET Core Module stdout log often records useful error messages not found in the Application Event Log. To enable and view stdout logs:
1. In the Azure Portal, navigate to the web app.
1. In the **App Service** blade, enter **kudu** in the search box.
1. Select **Advanced Tools** > **Go**.
1. Select **Debug console > CMD**.
1. Navigate to *site/wwwroot*
1. Select the pencil icon to edit the *web.config* file.
1. In the `<aspNetCore />` element, set `stdoutLogEnabled="true"` and select **Save**.
Disable stdout logging when troubleshooting is complete by setting `stdoutLogEnabled="false"`.
For more information, see <xref:host-and-deploy/aspnet-core-module#log-creation-and-redirection>.
<a name="enhanced-diagnostic-logs"></a>
### ASP.NET Core Module debug log (Azure App Service)
The ASP.NET Core Module debug log provides additional, deeper logging from the ASP.NET Core Module. To enable and view stdout logs:
1. To enable the enhanced diagnostic log, perform either of the following:
* Follow the instructions in [Enhanced diagnostic logs](xref:host-and-deploy/iis/logging-and-diagnostics#enhanced-diagnostic-logs) to configure the app for an enhanced diagnostic logging. Redeploy the app.
* Add the `<handlerSettings>` shown in [Enhanced diagnostic logs](xref:host-and-deploy/iis/logging-and-diagnostics#enhanced-diagnostic-logs) to the live app's *web.config* file using the Kudu console:
1. Open **Advanced Tools** in the **Development Tools** area. Select the **Go→** button. The Kudu console opens in a new browser tab or window.
1. Using the navigation bar at the top of the page, open **Debug console** and select **CMD**.
1. Open the folders to the path **site** > **wwwroot**. Edit the *web.config* file by selecting the pencil button. Add the `<handlerSettings>` section as shown in [Enhanced diagnostic logs](xref:host-and-deploy/iis/logging-and-diagnostics#enhanced-diagnostic-logs). Select the **Save** button.
1. Open **Advanced Tools** in the **Development Tools** area. Select the **Go→** button. The Kudu console opens in a new browser tab or window.
1. Using the navigation bar at the top of the page, open **Debug console** and select **CMD**.
1. Open the folders to the path **site** > **wwwroot**. If you didn't supply a path for the *aspnetcore-debug.log* file, the file appears in the list. If you supplied a path, navigate to the location of the log file.
1. Open the log file with the pencil button next to the file name.
Disable debug logging when troubleshooting is complete:
To disable the enhanced debug log, perform either of the following:
* Remove the `<handlerSettings>` from the *web.config* file locally and redeploy the app.
* Use the Kudu console to edit the *web.config* file and remove the `<handlerSettings>` section. Save the file.
For more information, see <xref:host-and-deploy/iis/logging-and-diagnostics#enhanced-diagnostic-logs>.
> [!WARNING]
> Failure to disable the debug log can lead to app or server failure. There's no limit on log file size. Only use debug logging to troubleshoot app startup problems.
>
> For general logging in an ASP.NET Core app after startup, use a logging library that limits log file size and rotates logs. For more information, see [third-party logging providers](xref:fundamentals/logging/index#third-party-logging-providers).
### Slow or hanging app (Azure App Service)
When an app responds slowly or hangs on a request, see [Troubleshoot slow web app performance issues in Azure App Service](/azure/app-service/app-service-web-troubleshoot-performance-degradation).
### Monitoring blades
Monitoring blades provide an alternative troubleshooting experience to the methods described earlier in the topic. These blades can be used to diagnose 500-series errors.
Confirm that the ASP.NET Core Extensions are installed. If the extensions aren't installed, install them manually:
1. In the **DEVELOPMENT TOOLS** blade section, select the **Extensions** blade.
1. The **ASP.NET Core Extensions** should appear in the list.
1. If the extensions aren't installed, select the **Add** button.
1. Choose the **ASP.NET Core Extensions** from the list.
1. Select **OK** to accept the legal terms.
1. Select **OK** on the **Add extension** blade.
1. An informational pop-up message indicates when the extensions are successfully installed.
If stdout logging isn't enabled, follow these steps:
1. In the Azure portal, select the **Advanced Tools** blade in the **DEVELOPMENT TOOLS** area. Select the **Go→** button. The Kudu console opens in a new browser tab or window.
1. Using the navigation bar at the top of the page, open **Debug console** and select **CMD**.
1. Open the folders to the path **site** > **wwwroot** and scroll down to reveal the *web.config* file at the bottom of the list.
1. Click the pencil icon next to the *web.config* file.
1. Set **stdoutLogEnabled** to `true` and change the **stdoutLogFile** path to: `\\?\%home%\LogFiles\stdout`.
1. Select **Save** to save the updated *web.config* file.
Proceed to activate diagnostic logging:
1. In the Azure portal, select the **Diagnostics logs** blade.
1. Select the **On** switch for **Application Logging (Filesystem)** and **Detailed error messages**. Select the **Save** button at the top of the blade.
1. To include failed request tracing, also known as Failed Request Event Buffering (FREB) logging, select the **On** switch for **Failed request tracing**.
1. Select the **Log stream** blade, which is listed immediately under the **Diagnostics logs** blade in the portal.
1. Make a request to the app.
1. Within the log stream data, the cause of the error is indicated.
Be sure to disable stdout logging when troubleshooting is complete.
To view the failed request tracing logs (FREB logs):
1. Navigate to the **Diagnose and solve problems** blade in the Azure portal.
1. Select **Failed Request Tracing Logs** from the **SUPPORT TOOLS** area of the sidebar.
See [Failed request traces section of the Enable diagnostics logging for web apps in Azure App Service topic](/azure/app-service/web-sites-enable-diagnostic-log#failed-request-traces) and the [Application performance FAQs for Web Apps in Azure: How do I turn on failed request tracing?](/azure/app-service/app-service-web-availability-performance-application-issues-faq#how-do-i-turn-on-failed-request-tracing) for more information.
For more information, see [Enable diagnostics logging for web apps in Azure App Service](/azure/app-service/web-sites-enable-diagnostic-log).
> [!WARNING]
> Failure to disable the stdout log can lead to app or server failure. There's no limit on log file size or the number of log files created.
>
> For routine logging in an ASP.NET Core app, use a logging library that limits log file size and rotates logs. For more information, see [third-party logging providers](xref:fundamentals/logging/index#third-party-logging-providers).
## Troubleshoot on IIS
### Application Event Log (IIS)
Access the Application Event Log:
1. Open the Start menu, search for *Event Viewer*, and select the **Event Viewer** app.
1. In **Event Viewer**, open the **Windows Logs** node.
1. Select **Application** to open the Application Event Log.
1. Search for errors associated with the failing app. Errors have a value of *IIS AspNetCore Module* or *IIS Express AspNetCore Module* in the *Source* column.
### Run the app at a command prompt
Many startup errors don't produce useful information in the Application Event Log. You can find the cause of some errors by running the app at a command prompt on the hosting system.
#### Framework-dependent deployment
If the app is a [framework-dependent deployment](/dotnet/core/deploying/#framework-dependent-deployments-fdd):
1. At a command prompt, navigate to the deployment folder and run the app by executing the app's assembly with *dotnet.exe*. In the following command, substitute the name of the app's assembly for \<assembly_name>: `dotnet .\<assembly_name>.dll`.
1. The console output from the app, showing any errors, is written to the console window.
1. If the errors occur when making a request to the app, make a request to the host and port where Kestrel listens. Using the default host and post, make a request to `http://localhost:5000/`. If the app responds normally at the Kestrel endpoint address, the problem is more likely related to the hosting configuration and less likely within the app.
#### Self-contained deployment
If the app is a [self-contained deployment](/dotnet/core/deploying/#self-contained-deployments-scd):
1. At a command prompt, navigate to the deployment folder and run the app's executable. In the following command, substitute the name of the app's assembly for \<assembly_name>: `<assembly_name>.exe`.
1. The console output from the app, showing any errors, is written to the console window.
1. If the errors occur when making a request to the app, make a request to the host and port where Kestrel listens. Using the default host and post, make a request to `http://localhost:5000/`. If the app responds normally at the Kestrel endpoint address, the problem is more likely related to the hosting configuration and less likely within the app.
### ASP.NET Core Module stdout log (IIS)
To enable and view stdout logs:
1. Navigate to the site's deployment folder on the hosting system.
1. If the *logs* folder isn't present, create the folder. For instructions on how to enable MSBuild to create the *logs* folder in the deployment automatically, see the [Directory structure](xref:host-and-deploy/directory-structure) topic.
1. Edit the *web.config* file. Set **stdoutLogEnabled** to `true` and change the **stdoutLogFile** path to point to the *logs* folder (for example, `.\logs\stdout`). `stdout` in the path is the log file name prefix. A timestamp, process id, and file extension are added automatically when the log is created. Using `stdout` as the file name prefix, a typical log file is named *stdout_20180205184032_5412.log*.
1. Ensure your application pool's identity has write permissions to the *logs* folder.
1. Save the updated *web.config* file.
1. Make a request to the app.
1. Navigate to the *logs* folder. Find and open the most recent stdout log.
1. Study the log for errors.
Disable stdout logging when troubleshooting is complete:
1. Edit the *web.config* file.
1. Set **stdoutLogEnabled** to `false`.
1. Save the file.
For more information, see <xref:host-and-deploy/aspnet-core-module#log-creation-and-redirection>.
> [!WARNING]
> Failure to disable the stdout log can lead to app or server failure. There's no limit on log file size or the number of log files created.
>
> For routine logging in an ASP.NET Core app, use a logging library that limits log file size and rotates logs. For more information, see [third-party logging providers](xref:fundamentals/logging/index#third-party-logging-providers).
### ASP.NET Core Module debug log (IIS)
Add the following handler settings to the app's *web.config* file to enable ASP.NET Core Module debug log:
```xml
<aspNetCore ...>
<handlerSettings>
<handlerSetting name="debugLevel" value="file" />
<handlerSetting name="debugFile" value="c:\temp\ancm.log" />
</handlerSettings>
</aspNetCore>
確認為記錄指定的路徑存在,而且應用程式集區的身分識別具有該位置的寫入權限。
如需詳細資訊,請參閱 使用 ASP.NET Core 模組 建立和重新導向記錄。
啟用開發人員例外頁面
在開發環境中,可以將 ASPNETCORE_ENVIRONMENT
環境變數新增至 web.config 來執行應用程式。 只要主機產生器上的 UseEnvironment
不會覆寫應用程式啟動內的環境,設定該環境變數便可允許在應用程式執行時顯示開發人員例外狀況頁面。
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
hostingModel="InProcess">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
只有在沒有對網際網路公開的暫存和測試伺服器上使用時,才建議為 ASPNETCORE_ENVIRONMENT
設定環境變數。 進行疑難排解之後,請從 web.config 檔案中移除環境變數。 如需有關在 web.config 中設定環境變數的資訊,請參閱 aspNetCore 的 environmentVariables 子元素。
從應用程式取得資料
若應用程式能夠回應要求、請使用終端機內嵌中介軟體從應用程式取得要求、連線與額外資料。 如需詳細資訊和範例程式碼,請參閱 ASP.NET 針對核心專案 進行疑難排解和偵錯。
緩慢或懸掛的應用程式 (IIS)
損 毀傾印 是系統記憶體的快照集,可協助判斷應用程式當機、啟動失敗或緩慢應用程式的原因。
應用程式損毀或發生例外狀況
從 Windows 錯誤報告 (WER) 取得並分析傾印:
在
c:\dumps
中建立資料夾以保存損毀傾印檔案。 應用程式集區必須具備該資料夾的寫入權限。在會導致損毀的情況下,執行應用程式。
發生損毀之後,請執行 DisableDumps PowerShell 指令碼:
在應用程式損毀且傾印收集完成之後,即可正常結束應用程式。 PowerShell 指令碼會將 WER 設定為每個應用程式收集最多五個傾印。
警告
損毀傾印可能會佔用大量磁碟空間 (每個高達好幾 GB)。
應用程式停止回應、在啟動期間失敗,或正常執行
當應用程式 停止 回應(停止回應但不會當機)、在啟動期間失敗或正常執行時,請參閱 使用者模式傾印檔案:選擇最佳工具以選取適當的工具 來產生傾印。
分析傾印
您可以使用數種方法來分析傾印。 如需詳細資訊,請參閱分析使用者模式傾印檔案。
清除套件快取
在升級開發電腦上的 .NET Core SDK 或變更應用程式內的套件版本之後,運作中的應用程式可能會立即失敗。 在某些情況下,執行主要升級時,不一致的套件可能會中斷應用程式。 大多數這些問題都可依照下列指示來進行修正:
刪除 [bin] 和 [obj] 資料夾。
藉由執行 dotnet nuget 區域變數來清除套件快取,全都 從命令殼層清除。
您也可以使用 nuget.exe 工具來完成清除套件快取,並執行 命令
nuget locals all -clear
。 nuget.exe 並未隨附在 Windows 桌面作業系統的安裝中,必須另外從 NuGet 網站取得。還原並重建專案。
在重新部署應用程式之前,請先刪除伺服器上部署資料夾中的所有檔案。
其他資源
- 使用 Visual Studio 對 .NET 和 ASP.NET Core 原始程式碼進行偵錯
- 針對 ASP.NET Core 專案進行疑難排解和偵錯
- Azure App Service 與 IIS 搭配 ASP.NET Core 時的常見錯誤疑難排解
- 處理 ASP.NET Core 中的錯誤
- 適用於 IIS 的 ASP.NET Core 模組 (ANCM)
Azure 文件
- ASP.NET Core 的 Application Insights \(英文\)
- 使用 Visual Studio 針對 Azure App 服務 中的 Web 應用程式進行疑難排解的遠端偵錯 Web 應用程式一節
- Azure App Service 診斷概觀
- 如何:監視 Azure App Service 中的應用程式
- 使用 Visual Studio 疑難排解 Azure App Service 中的 Web 應用程式
- 對您的 Azure Web 應用程式中「502 不正確的閘道」和「503 服務無法使用」的 HTTP 錯誤進行疑難排解
- 針對 Azure App Service 中 Web 應用程式效能變慢的問題進行疑難排解
- Azure Web 應用程式的應用程式效能常見問題集
- Azure Web 應用程式沙箱 (App Service 執行階段執行限制) \(英文\)
Visual Studio 文件
- Visual Studio 2017 中 Azure 中 IIS 上的遠端偵錯 ASP.NET Core
- Visual Studio 2017 中遠端 IIS 電腦上的遠端偵錯 ASP.NET 核心
- 了解使用 Visual Studio 進行偵錯
Visual Studio Code 文件
- 使用 Visual Studio Code 進行偵錯 \(英文\)
本文提供一般應用程式啟動錯誤的相關資訊,以及如何在應用程式部署至 Azure App 服務 或 IIS 時診斷錯誤的指示:
應用程式啟動錯誤
說明常見的啟動 HTTP 狀態碼案例。
針對Azure App 服務進行疑難排解
提供部署至Azure App 服務之應用程式的疑難排解建議。
針對 IIS 進行疑難排解
針對部署到 IIS 或在本機 IIS Express 上執行的應用程式提供疑難排解建議。 本指南同時適用于 Windows Server 和 Windows 桌面部署。
清除套件快取
說明在執行主要升級或變更套件版本時,當不一致套件中斷應用程式時,該怎麼做。
其他資源
列出其他疑難排解主題。
應用程式啟動錯誤
在 Visual Studio 中,進行偵錯時,ASP.NET Core 專案會預設為 IIS Express 裝載環境。 502.5 - 進程失敗 或 500.30 - 在本機偵錯時發生的啟動失敗 ,可以使用本主題的建議來診斷。
403.14 禁止
應用程式無法啟動。 記錄下列錯誤:
The Web server is configured to not list the contents of this directory.
錯誤通常是由主控系統上的部署中斷所造成,其中包括下列任何案例:
- 應用程式會部署到主控系統上的錯誤資料夾。
- 部署程式無法將所有應用程式的檔案和資料夾移至主控系統上的部署資料夾。
- 部署中遺漏 web.config 檔案,或 web.config 檔案內容格式不正確。
執行下列步驟:
- 從主控系統上的部署資料夾刪除所有檔案和資料夾。
- 使用您一般的部署方法,將應用程式的 publish 資料夾內容重新部署至主控系統,例如 Visual Studio、PowerShell 或手動部署:
- 確認 部署中有 web.config 檔案,且其內容正確無誤。
- 在 Azure App 服務 上裝載時,請確認應用程式已部署至
D:\home\site\wwwroot
資料夾。 - 當應用程式由 IIS 裝載時,請確認應用程式已部署至 IIS 管理員 的基本 設定 中顯示的 IIS 實體路徑 。
- 藉由比較主控系統上的部署與專案 發佈 資料夾的內容,確認已部署所有應用程式的檔案和資料夾。
如需已發佈 ASP.NET Core 應用程式佈建的詳細資訊,請參閱 ASP.NET Core 目錄結構 。 如需 web.config 檔案的詳細資訊 ,請參閱 適用于 IIS 的 ASP.NET Core Module (ANCM)。
500 內部伺服器錯誤
應用程式啟動,但有錯誤導致伺服器無法完成要求。
此錯誤是在啟動或建立回應時,在應用程式的程式碼內發生。 回應可能未包含任何內容,或是回應可能在瀏覽器中以「500 內部伺服器錯誤」的形式出現。 「應用程式事件記錄檔」通常會指出該應用程式已正常啟動。 從伺服器的觀點來看,這是正確的。 應用程式已啟動,但無法產生有效的回應。 請在伺服器上於命令提示字元中執行應用程式或啟用 ASP.NET Core 模組 stdout 記錄檔,以針對問題進行疑難排解。
安裝 .NET Core 裝載套件組合或損毀時,也可能會發生此錯誤。 安裝或修復 .NET Core 裝載套件組合 (適用于 IIS) 或 Visual Studio (適用于 IIS Express) 的安裝,可能會修正此問題。
500.0 同處理序處理常式載入失敗
背景工作處理序失敗。 應用程式未啟動。
ASP.NET Core 模組 找不到 .NET Core CLR,並尋找進程內要求處理常式 ( aspnetcorev2_inprocess.dll )。 請確定:
- 應用程式以 Microsoft.AspNetCore.Server.IIS NuGet 套件或 Microsoft.AspNetCore.App 中繼套件為目標。
- 應用程式設為目標的 ASP.NET Core 共用架構版本有安裝在目標機器上。
500.0 跨處理序處理常式載入失敗
背景工作處理序失敗。 應用程式未啟動。
ASP.NET 核心模組 找不到跨進程裝載要求處理常式。 請確定 aspnetcorev2_outofprocess.dll 出現在子資料夾中,且位於 aspnetcorev2.dll 旁。
502.5 處理序失敗
背景工作處理序失敗。 應用程式未啟動。
ASP.NET Core 模組嘗試啟動背景工作處理序,但無法啟動。 通常從應用程式事件記錄檔和 ASP.NET Core 模組 stdout 記錄檔中的項目,即可判斷啟動失敗的原因。
因為目標 ASP.NET Core 共用架構的版本不存在,導致應用程式設定錯誤是常見的失敗狀況。 請檢查安裝在目標機器上的 ASP.NET Core 共用架構版本為何。 「共用的架構」是一組安裝於電腦上且由 Microsoft.AspNetCore.App
之類的中繼套件所參考的組件 (.dll 檔案)。 中繼套件參考可以指定最低必要版本。 如需詳細資訊,請參閱共用的架構 \(英文\)。
當裝載或應用程式設定錯誤造成背景工作處理序發生失敗時,會傳回 [502.5 處理序失敗] 錯誤頁面:
無法啟動應用程式 (ErrorCode '0x800700c1')
EventID: 1010
Source: IIS AspNetCore Module V2
Failed to start application '/LM/W3SVC/6/ROOT/', ErrorCode '0x800700c1'.
應用程式無法啟動,因為無法載入應用程式的組件 (.dll)。
當已發行的應用程式與 w3wp/iisexpress 處理序之間出現位元不符的情況時,就會發生此錯誤。
確認應用程式集區的 32 位元設定正確:
- 在 IIS 管理員的 [應用程式集區] 中,選取應用程式集區。
- 在 [動作] 面板中,選取 [編輯應用程式集區] 下的 [進階設定]。
- 設定 啟用 32 位應用程式 :
- 如果部署 32 位元 (x86) 應用程式,請將值設定為
True
。 - 如果部署 64 位元 (x64) 應用程式,請將值設定為
False
。
- 如果部署 32 位元 (x86) 應用程式,請將值設定為
確認專案檔中的 MSBuild 屬性與應用程式的已發佈位之間 <Platform>
沒有衝突。
連線重設
如果是在傳送標頭之後才發生錯誤,則當發生錯誤時,伺服器已來不及傳送「500 內部伺服器錯誤」。 通常是在將回應的複雜物件序列化的期間發生錯誤時,會發生此錯誤。 這類錯誤會在用戶端上顯示為「連線重設」錯誤。 應用程式記錄可協助針對這些類型的錯誤進行疑難排解。
預設啟動限制
ASP.NET 核心模組 會設定為預設 startupTimeLimit 120 秒。 保留預設值時,在模組記錄處理序失敗之前,應用程式最多可花費兩分鐘來進行啟動。 如需有關設定模組的資訊,請參閱 aspNetCore 元素的屬性。
針對Azure App 服務進行疑難排解
重要
ASP.NET Core 預覽版本與 Azure App Service
根據預設,ASP.NET Core 預覽版本不會部署至 Azure App Service。 若要裝載使用 ASP.NET Core 預覽版本的應用程式,請參閱將 ASP.NET Core 預覽版本部署至 Azure App Service。
應用程式事件記錄檔 (Azure App 服務)
若要存取「應用程式事件記錄檔」,請使用 Azure 入口網站中的 [診斷並解決問題] 刀鋒視窗:
- 在 Azure 入口網站的 [應用程式服務] 中,開啟應用程式。
- 選取 [診斷並解決問題]。
- 選取 [診斷工具] 標題。
- 在 [支援工具] 下,選取 [應用程式事件] 按鈕。
- 檢查 [來源] 資料行中 IIS AspNetCoreModule 或 IIS AspNetCoreModule V2 項目所提供的最新錯誤。
除了使用 [診斷並解決問題] 刀鋒視窗之外,也可以使用 Kudu 來直接檢查「應用程式事件記錄檔」:
- 在 [開發工具] 區域中,開啟 [進階工具]。 選取 [ Go→ ] 按鈕。 Kudu 主控台會在新的瀏覽器索引標籤或視窗中開啟。
- 使用頁面頂端的導覽列,開啟 [偵錯主控台],然後選取 [CMD]。
- 開啟 [LogFiles] 資料夾。
- 選取檔案旁的
eventlog.xml
鉛筆圖示。 - 檢查記錄檔。 捲動至記錄檔的底部以查看最新事件。
在 Kudu 主控台中執行應用程式
許多啟動錯誤不會在「應用程式事件記錄檔」中產生實用的資訊。 您可以在 Kudu「遠端執行主控台」中執行應用程式來探索錯誤:
- 在 [開發工具] 區域中,開啟 [進階工具]。 選取 [ Go→ ] 按鈕。 Kudu 主控台會在新的瀏覽器索引標籤或視窗中開啟。
- 使用頁面頂端的導覽列,開啟 [偵錯主控台],然後選取 [CMD]。
測試 32 位元 (x86) 應用程式
目前版本
cd d:\home\site\wwwroot
- 執行應用程式:
應用程式的主控台輸出 (顯示任何錯誤) 會以管道傳送至 Kudu 主控台。
在預覽版本上執行的架構相依部署
要求安裝 ASP.NET Core {VERSION} (x86) 執行階段網站延伸模組。
cd D:\home\SiteExtensions\AspNetCoreRuntime.{X.Y}.x32
({X.Y}
是執行階段版本)- 執行應用程式:
dotnet \home\site\wwwroot\{ASSEMBLY NAME}.dll
應用程式的主控台輸出 (顯示任何錯誤) 會以管道傳送至 Kudu 主控台。
測試 64 位元 (x64) 應用程式
目前版本
- 如果應用程式是 64 位 (x64) 架構相依部署 :
cd D:\Program Files\dotnet
- 執行應用程式:
dotnet \home\site\wwwroot\{ASSEMBLY NAME}.dll
- 如果應用程式是 獨立的部署 :
cd D:\home\site\wwwroot
- 執行應用程式:
{ASSEMBLY NAME}.exe
應用程式的主控台輸出 (顯示任何錯誤) 會以管道傳送至 Kudu 主控台。
在預覽版本上執行的架構相依部署
要求安裝 ASP.NET Core {VERSION} (x64) 執行階段網站延伸模組。
cd D:\home\SiteExtensions\AspNetCoreRuntime.{X.Y}.x64
({X.Y}
是執行階段版本)- 執行應用程式:
dotnet \home\site\wwwroot\{ASSEMBLY NAME}.dll
應用程式的主控台輸出 (顯示任何錯誤) 會以管道傳送至 Kudu 主控台。
ASP.NET Core 模組 stdout 記錄檔 (Azure App 服務)
ASP.NET Core 模組 stdout 記錄檔通常會記錄「應用程式事件記錄檔」中所沒有的實用訊息。 啟用及檢視 stdout 記錄檔:
- 在 Azure 入口網站中,瀏覽至 [診斷並解決問題] 刀鋒視窗。
- 在 [選取問題類別] 底下,選取 [Web 應用程式停止運作] 按鈕。
- 在 [建議的解決方案]>[啟用 Stdout 記錄檔重新導向] 底下,選取用來開啟 Kudu 主控台以編輯 Web.Config 的按鈕。
- 在 Kudu [診斷主控台] 中,將資料夾開啟至路徑 [site]>[wwwroot]。 向下捲動以顯露位於清單底部的 web.config 檔案。
- 按一下 web.config 檔案旁邊的鉛筆圖示。
- 將 stdoutLogEnabled 設定為
true
,並將 stdoutLogFile 路徑變更為:\\?\%home%\LogFiles\stdout
。 - 選取 [儲存] 以儲存已更新的 web.config 檔案。
- 對應用程式發出要求。
- 返回 Azure 入口網站。 選取 [開發工具] 區域中的 [進階工具] 刀鋒視窗。 選取 [ Go→ ] 按鈕。 Kudu 主控台會在新的瀏覽器索引標籤或視窗中開啟。
- 使用頁面頂端的導覽列,開啟 [偵錯主控台],然後選取 [CMD]。
- 選取 [LogFiles] 資料夾。
- 檢查 [修改時間] 資料行,然後選取鉛筆圖示來編輯修改日期最新的 stdout 記錄檔。
- 當記錄檔開啟時,會顯示錯誤。
完成疑難排解時,請停用 stdout 記錄:
- 在 Kudu [診斷主控台] 中,返回路徑 [site]>[wwwroot] 以顯露 web.config 檔案。 再次選取鉛筆圖示來開啟 web.config 檔案。
- 將 stdoutLogEnabled 設定為
false
。 - 選取 [儲存] 以儲存檔案。
如需詳細資訊,請參閱適用於 IIS 的 ASP.NET Core 模組 (ANCM)。
警告
如果無法停用 stdout 記錄檔,可能會造成應用程式或伺服器發生失敗。 因為它並沒有記錄檔大小或數量上的限制。 請只在針對應用程式啟動問題進行疑難排解時,才使用 stdout 記錄。
針對 ASP.NET Core 應用程式啟動後的一般記錄,請使用會限制記錄檔大小並輪替記錄檔的記錄程式庫。 如需詳細資訊,請參閱協力廠商記錄提供者。
ASP.NET Core 模組偵錯記錄檔 (Azure App 服務)
ASP.NET Core 模組偵錯記錄提供 ASP.NET Core 模組中其他且更深入的記錄。 啟用及檢視 stdout 記錄檔:
- 若要啟用增強的診斷記錄,請執行下列其中一項:
- 遵循增強型診斷記錄中的指示,來設定應用程式進行增強型診斷記錄。 重新部署應用程式。
<handlerSettings>
使用 Kudu 主控台,將增強型診斷記錄 中顯示的 新增至即時應用程式的 web.config 檔案:- 在 [開發工具] 區域中,開啟 [進階工具]。 選取 [ Go→ ] 按鈕。 Kudu 主控台會在新的瀏覽器索引標籤或視窗中開啟。
- 使用頁面頂端的導覽列,開啟 [偵錯主控台],然後選取 [CMD]。
- 將資料夾開啟至路徑 [site]>[wwwroot]。 選取鉛筆圖示來編輯 web.config 檔案。 新增
<handlerSettings>
區段,如增強型診斷記錄中所示。 選取儲存按鈕。
- 在 [開發工具] 區域中,開啟 [進階工具]。 選取 [ Go→ ] 按鈕。 Kudu 主控台會在新的瀏覽器索引標籤或視窗中開啟。
- 使用頁面頂端的導覽列,開啟 [偵錯主控台],然後選取 [CMD]。
- 將資料夾開啟至路徑 [site]>[wwwroot]。 如果未提供 aspnetcore-debug.log 檔案的路徑,該檔案會顯示在清單中。 如果已提供路徑,請巡覽至記錄檔的位置。
- 使用檔案名稱旁的鉛筆圖示來開啟記錄檔。
完成疑難排解時,請停用偵錯記錄:
若要停用增強型偵錯記錄,請執行下列任一動作:
- 從 web.config 檔案本機移除
<handlerSettings>
並重新部署應用程式。 - 使用 Kudu 主控台來編輯 web.config 檔案並移除
<handlerSettings>
區段。 儲存檔案。
如需詳細資訊,請參閱 使用 ASP.NET Core 模組 建立和重新導向記錄。
警告
無法停用偵錯記錄,可能會造成應用程式或伺服器發生失敗。 記錄檔大小沒有任何限制。 請只在針對應用程式啟動問題進行疑難排解時,才使用偵錯記錄。
針對 ASP.NET Core 應用程式啟動後的一般記錄,請使用會限制記錄檔大小並輪替記錄檔的記錄程式庫。 如需詳細資訊,請參閱協力廠商記錄提供者。
慢速或懸掛應用程式 (Azure App 服務)
當應用程式針對要求回應緩慢或無回應時,請參閱下列文章:
- 針對 Azure App Service 中 Web 應用程式效能變慢的問題進行疑難排解
- 使用損毀診斷程式網站延伸模組來擷取傾印,以取得 Azure Web 應用程式上的間歇性例外狀況或效能問題 \(英文\)
監視刀鋒視窗
監視刀鋒視窗為本主題稍早所述的方法提供替代的疑難排解體驗。 這些刀鋒視窗可用來診斷 500 系列的錯誤。
請確認已安裝 ASP.NET Core 延伸模組。 如果未安裝這些延伸模組,請手動安裝:
- 在 [開發工具] 刀鋒視窗區段中,選取 [延伸模組] 刀鋒視窗。
- [ASP.NET Core 延伸模組] 應該會出現在清單中。
- 如果未安裝這些延伸模組,請選取 [新增] 按鈕。
- 從清單中選擇 [ASP.NET Core 延伸模組]。
- 選取 [確定] 以接受法律條款。
- 在 [新增延伸模組] 刀鋒視窗上,選取 [確定]。
- 成功安裝延伸模組時,會有資訊快顯訊息提供指示。
如果未啟用 stdout 記錄,請依照下列步驟進行操作:
- 在 Azure 入口網站中,選取 [開發工具] 區域中的 [進階工具] 刀鋒視窗。 選取 [ Go→ ] 按鈕。 Kudu 主控台會在新的瀏覽器索引標籤或視窗中開啟。
- 使用頁面頂端的導覽列,開啟 [偵錯主控台],然後選取 [CMD]。
- 將資料夾開啟至路徑 [site]>[wwwroot],然後向下捲動以顯露位於清單底部的 web.config 檔案。
- 按一下 web.config 檔案旁邊的鉛筆圖示。
- 將 stdoutLogEnabled 設定為
true
,並將 stdoutLogFile 路徑變更為:\\?\%home%\LogFiles\stdout
。 - 選取 [儲存] 以儲存已更新的 web.config 檔案。
繼續接著啟用診斷記錄:
- 在 Azure 入口網站中,選取 [診斷記錄檔] 刀鋒視窗。
- 選取 [應用程式記錄 (檔案系統)] 和 [詳細錯誤訊息].的 [開啟] 開關。 選取刀鋒視窗頂端的 [儲存] 按鈕。
- 若要包含失敗要求追蹤 (也稱為「失敗要求事件緩衝處理」(FREB) 記錄),請選取 [失敗要求的追蹤] 的 [開啟] 開關。
- 選取 [記錄資料流] 刀鋒視窗 (列在入口網站中緊接在 [診斷記錄檔] 刀鋒視窗之下)。
- 對應用程式發出要求。
- 在記錄資料流資料內,會指出錯誤的原因。
完成疑難排解時,請務必停用 stdout 記錄。
檢視失敗要求追蹤記錄檔 (FREB 記錄檔):
- 在 Azure 入口網站中,瀏覽至 [診斷並解決問題] 刀鋒視窗。
- 從資訊看板的 [支援工具] 區域中,選取 [失敗要求追蹤記錄檔]。
如需詳細資訊,請參閱<在 Azure App Service 中針對 Web 應用程式啟用診斷記錄功能>主題的<失敗要求追蹤>一節和Azure Web 應用程式的應用程式效能常見問題集:如何開啟失敗要求追蹤?。
如需詳細資訊,請參閱在 Azure App Service 中針對 Web 應用程式啟用診斷記錄功能。
警告
如果無法停用 stdout 記錄檔,可能會造成應用程式或伺服器發生失敗。 因為它並沒有記錄檔大小或數量上的限制。
針對 ASP.NET Core 應用程式中的例行性記錄,請使用會限制記錄檔大小並輪替記錄檔的記錄程式庫。 如需詳細資訊,請參閱協力廠商記錄提供者。
針對 IIS 進行疑難排解
應用程式事件記錄檔 (IIS)
存取「應用程式事件記錄檔」:
- 開啟[開始] 功能表,搜尋 事件檢視器 ,然後選取 事件檢視器 應用程式。
- 在 [事件檢視器] 中,開啟 [Windows 記錄] 節點。
- 選取 [應用程式] 以開啟「應用程式事件記錄檔」。
- 搜尋與失敗應用程式相關的錯誤。 錯誤在 [來源] 資料行中的值會是 IIS AspNetCore Module 或 IIS Express AspNetCore Module。
在命令提示字元中執行應用程式
許多啟動錯誤不會在「應用程式事件記錄檔」中產生實用的資訊。 您可以藉由在主控系統上的命令提示字元中執行應用程式,來找出一些錯誤的原因。
架構相依部署
如果應用程式是架構相依部署:
- 在命令提示字元中,瀏覽至部署資料夾,然後使用 dotnet.exe 來執行應用程式組件以執行應用程式。 在下列命令中,將應用程式元件的名稱取代為 < assembly_name > :
dotnet .\<assembly_name>.dll
。 - 來自應用程式的主控台輸出若有顯示任何錯誤,就會寫入至主控台視窗。
- 如果向應用程式提出要求時發生錯誤,請向接聽的主機和埠 Kestrel 提出要求。 如果使用預設主機和連接埠,請對
http://localhost:5000/
發出要求。 如果應用程式在端點位址上正常 Kestrel 回應,問題就更可能與裝載組態相關,而且應用程式內的可能性較低。
自封式部署
如果應用程式是自封式部署:
- 在命令提示字元中,瀏覽至部署資料夾,然後執行應用程式的可執行檔。 在下列命令中,將應用程式元件的名稱取代為 < assembly_name > :
<assembly_name>.exe
。 - 來自應用程式的主控台輸出若有顯示任何錯誤,就會寫入至主控台視窗。
- 如果向應用程式提出要求時發生錯誤,請向接聽的主機和埠 Kestrel 提出要求。 如果使用預設主機和連接埠,請對
http://localhost:5000/
發出要求。 如果應用程式在端點位址上正常 Kestrel 回應,問題就更可能與裝載組態相關,而且應用程式內的可能性較低。
ASP.NET Core 模組 stdout 記錄檔 (IIS)
啟用及檢視 stdout 記錄檔:
- 瀏覽至主控系統上網站的部署資料夾。
- 如果 [logs] 資料夾不存在,請建立該資料夾。 如需有關如何讓 MSBuild 在部署中自動建立 [logs] 資料夾的指示,請參閱目錄結構主題。
- 編輯 web.config 檔案。 將 stdoutLogEnabled 設定為
true
,並將 stdoutLogFile 路徑變更為指向 [logs] 資料夾 (例如.\logs\stdout
)。 路徑中的stdout
是記錄檔名稱前置詞。 建立記錄檔時,系統會自動新增時間戳記、處理序識別碼及副檔名。 使用stdout
作為檔案名稱前置詞時,一般記錄檔會命名為 stdout_20180205184032_5412.log。 - 請確定您的應用程式集區身分識別具有 logs 資料夾的寫入權限。
- 儲存已更新的 web.config 檔案。
- 對應用程式發出要求。
- 瀏覽至 [logs] 資料夾。 尋找並開啟最新的 stdout 記錄檔。
- 研究記錄檔以了解錯誤。
完成疑難排解時,請停用 stdout 記錄:
- 編輯 web.config 檔案。
- 將 stdoutLogEnabled 設定為
false
。 - 儲存檔案。
如需詳細資訊,請參閱適用於 IIS 的 ASP.NET Core 模組 (ANCM)。
警告
如果無法停用 stdout 記錄檔,可能會造成應用程式或伺服器發生失敗。 因為它並沒有記錄檔大小或數量上的限制。
針對 ASP.NET Core 應用程式中的例行性記錄,請使用會限制記錄檔大小並輪替記錄檔的記錄程式庫。 如需詳細資訊,請參閱協力廠商記錄提供者。
ASP.NET Core 模組偵錯記錄檔 (IIS)
將下列處理常式設定新增至應用程式的 web.config 檔案,以啟用 ASP.NET Core Module 偵錯記錄:
<aspNetCore ...>
<handlerSettings>
<handlerSetting name="debugLevel" value="file" />
<handlerSetting name="debugFile" value="c:\temp\ancm.log" />
</handlerSettings>
</aspNetCore>
確認為記錄指定的路徑存在,而且應用程式集區的身分識別具有該位置的寫入權限。
如需詳細資訊,請參閱 使用 ASP.NET Core 模組 建立和重新導向記錄。
啟用開發人員例外頁面
在開發環境中,可以將 ASPNETCORE_ENVIRONMENT
環境變數新增至 web.config 來執行應用程式。 只要主機產生器上的 UseEnvironment
不會覆寫應用程式啟動內的環境,設定該環境變數便可允許在應用程式執行時顯示開發人員例外狀況頁面。
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
hostingModel="InProcess">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
只有在沒有對網際網路公開的暫存和測試伺服器上使用時,才建議為 ASPNETCORE_ENVIRONMENT
設定環境變數。 進行疑難排解之後,請從 web.config 檔案中移除環境變數。 如需有關在 web.config 中設定環境變數的資訊,請參閱 aspNetCore 的 environmentVariables 子元素。
從應用程式取得資料
若應用程式能夠回應要求、請使用終端機內嵌中介軟體從應用程式取得要求、連線與額外資料。 如需詳細資訊和範例程式碼,請參閱 ASP.NET 針對核心專案 進行疑難排解和偵錯。
緩慢或懸掛的應用程式 (IIS)
損 毀傾印 是系統記憶體的快照集,可協助判斷應用程式當機、啟動失敗或緩慢應用程式的原因。
應用程式損毀或發生例外狀況
從 Windows 錯誤報告 (WER) 取得並分析傾印:
在
c:\dumps
中建立資料夾以保存損毀傾印檔案。 應用程式集區必須具備該資料夾的寫入權限。在會導致損毀的情況下,執行應用程式。
發生損毀之後,請執行 DisableDumps PowerShell 指令碼:
在應用程式損毀且傾印收集完成之後,即可正常結束應用程式。 PowerShell 指令碼會將 WER 設定為每個應用程式收集最多五個傾印。
警告
損毀傾印可能會佔用大量磁碟空間 (每個高達好幾 GB)。
應用程式停止回應、在啟動期間失敗,或正常執行
當應用程式 停止 回應(停止回應但不會當機)、在啟動期間失敗或正常執行時,請參閱 使用者模式傾印檔案:選擇最佳工具以選取適當的工具 來產生傾印。
分析傾印
您可以使用數種方法來分析傾印。 如需詳細資訊,請參閱分析使用者模式傾印檔案。
清除套件快取
在升級開發電腦上的 .NET Core SDK 或變更應用程式內的套件版本之後,運作中的應用程式可能會立即失敗。 在某些情況下,執行主要升級時,不一致的套件可能會中斷應用程式。 大多數這些問題都可依照下列指示來進行修正:
刪除 [bin] 和 [obj] 資料夾。
藉由執行 dotnet nuget 區域變數來清除套件快取,全都 從命令殼層清除。
您也可以使用 nuget.exe 工具來完成清除套件快取,並執行 命令
nuget locals all -clear
。 nuget.exe 並未隨附在 Windows 桌面作業系統的安裝中,必須另外從 NuGet 網站取得。還原並重建專案。
在重新部署應用程式之前,請先刪除伺服器上部署資料夾中的所有檔案。
其他資源
- 針對 ASP.NET Core 專案進行疑難排解和偵錯
- Azure App Service 與 IIS 搭配 ASP.NET Core 時的常見錯誤疑難排解
- 處理 ASP.NET Core 中的錯誤
- 適用於 IIS 的 ASP.NET Core 模組 (ANCM)
Azure 文件
- ASP.NET Core 的 Application Insights \(英文\)
- 使用 Visual Studio 針對 Azure App 服務 中的 Web 應用程式進行疑難排解的遠端偵錯 Web 應用程式一節
- Azure App Service 診斷概觀
- 如何:監視 Azure App Service 中的應用程式
- 使用 Visual Studio 疑難排解 Azure App Service 中的 Web 應用程式
- 對您的 Azure Web 應用程式中「502 不正確的閘道」和「503 服務無法使用」的 HTTP 錯誤進行疑難排解
- 針對 Azure App Service 中 Web 應用程式效能變慢的問題進行疑難排解
- Azure Web 應用程式的應用程式效能常見問題集
- Azure Web 應用程式沙箱 (App Service 執行階段執行限制) \(英文\)
Visual Studio 文件
- Visual Studio 2017 中 Azure 中 IIS 上的遠端偵錯 ASP.NET Core
- Visual Studio 2017 中遠端 IIS 電腦上的遠端偵錯 ASP.NET 核心
- 了解使用 Visual Studio 進行偵錯
Visual Studio Code 文件
- 使用 Visual Studio Code 進行偵錯 \(英文\)
本文提供一般應用程式啟動錯誤的相關資訊,以及如何在應用程式部署至 Azure App 服務 或 IIS 時診斷錯誤的指示:
應用程式啟動錯誤
說明常見的啟動 HTTP 狀態碼案例。
針對Azure App 服務進行疑難排解
提供部署至Azure App 服務之應用程式的疑難排解建議。
針對 IIS 進行疑難排解
針對部署到 IIS 或在本機 IIS Express 上執行的應用程式提供疑難排解建議。 本指南同時適用于 Windows Server 和 Windows 桌面部署。
清除套件快取
說明在執行主要升級或變更套件版本時,當不一致套件中斷應用程式時,該怎麼做。
其他資源
列出其他疑難排解主題。
應用程式啟動錯誤
在 Visual Studio 中,進行偵錯時,ASP.NET Core 專案會預設為 IIS Express 裝載環境。 502.5 進程失敗 ,可在本機偵錯時,使用本主題的建議來診斷。
403.14 禁止
應用程式無法啟動。 記錄下列錯誤:
The Web server is configured to not list the contents of this directory.
錯誤通常是由主控系統上的部署中斷所造成,其中包括下列任何案例:
- 應用程式會部署到主控系統上的錯誤資料夾。
- 部署程式無法將所有應用程式的檔案和資料夾移至主控系統上的部署資料夾。
- 部署中遺漏 web.config 檔案,或 web.config 檔案內容格式不正確。
執行下列步驟:
- 從主控系統上的部署資料夾刪除所有檔案和資料夾。
- 使用您一般的部署方法,將應用程式的 publish 資料夾內容重新部署至主控系統,例如 Visual Studio、PowerShell 或手動部署:
- 確認 部署中有 web.config 檔案,且其內容正確無誤。
- 在 Azure App 服務 上裝載時,請確認應用程式已部署至
D:\home\site\wwwroot
資料夾。 - 當應用程式由 IIS 裝載時,請確認應用程式已部署至 IIS 管理員 的基本 設定 中顯示的 IIS 實體路徑 。
- 藉由比較主控系統上的部署與專案 發佈 資料夾的內容,確認已部署所有應用程式的檔案和資料夾。
如需已發佈 ASP.NET Core 應用程式佈建的詳細資訊,請參閱 ASP.NET Core 目錄結構 。 如需 web.config 檔案的詳細資訊 ,請參閱 適用于 IIS 的 ASP.NET Core Module (ANCM)。
500 內部伺服器錯誤
應用程式啟動,但有錯誤導致伺服器無法完成要求。
此錯誤是在啟動或建立回應時,在應用程式的程式碼內發生。 回應可能未包含任何內容,或是回應可能在瀏覽器中以「500 內部伺服器錯誤」的形式出現。 「應用程式事件記錄檔」通常會指出該應用程式已正常啟動。 從伺服器的觀點來看,這是正確的。 應用程式已啟動,但無法產生有效的回應。 請在伺服器上於命令提示字元中執行應用程式或啟用 ASP.NET Core 模組 stdout 記錄檔,以針對問題進行疑難排解。
安裝 .NET Core 裝載套件組合或損毀時,也可能會發生此錯誤。 安裝或修復 .NET Core 裝載套件組合 (適用于 IIS) 或 Visual Studio (適用于 IIS Express) 的安裝,可能會修正此問題。
502.5 處理序失敗
背景工作處理序失敗。 應用程式未啟動。
ASP.NET Core 模組嘗試啟動背景工作處理序,但無法啟動。 通常從應用程式事件記錄檔和 ASP.NET Core 模組 stdout 記錄檔中的項目,即可判斷啟動失敗的原因。
因為目標 ASP.NET Core 共用架構的版本不存在,導致應用程式設定錯誤是常見的失敗狀況。 請檢查安裝在目標機器上的 ASP.NET Core 共用架構版本為何。 「共用的架構」是一組安裝於電腦上且由 Microsoft.AspNetCore.App
之類的中繼套件所參考的組件 (.dll 檔案)。 中繼套件參考可以指定最低必要版本。 如需詳細資訊,請參閱共用的架構 \(英文\)。
當裝載或應用程式設定錯誤造成背景工作處理序發生失敗時,會傳回 [502.5 處理序失敗] 錯誤頁面:
無法啟動應用程式 (ErrorCode '0x800700c1')
EventID: 1010
Source: IIS AspNetCore Module V2
Failed to start application '/LM/W3SVC/6/ROOT/', ErrorCode '0x800700c1'.
應用程式無法啟動,因為無法載入應用程式的組件 (.dll)。
當已發行的應用程式與 w3wp/iisexpress 處理序之間出現位元不符的情況時,就會發生此錯誤。
確認應用程式集區的 32 位元設定正確:
- 在 IIS 管理員的 [應用程式集區] 中,選取應用程式集區。
- 在 [動作] 面板中,選取 [編輯應用程式集區] 下的 [進階設定]。
- 設定 啟用 32 位應用程式 :
- 如果部署 32 位元 (x86) 應用程式,請將值設定為
True
。 - 如果部署 64 位元 (x64) 應用程式,請將值設定為
False
。
- 如果部署 32 位元 (x86) 應用程式,請將值設定為
確認專案檔中的 MSBuild 屬性與應用程式的已發佈位之間 <Platform>
沒有衝突。
連線重設
如果是在傳送標頭之後才發生錯誤,則當發生錯誤時,伺服器已來不及傳送「500 內部伺服器錯誤」。 通常是在將回應的複雜物件序列化的期間發生錯誤時,會發生此錯誤。 這類錯誤會在用戶端上顯示為「連線重設」錯誤。 應用程式記錄可協助針對這些類型的錯誤進行疑難排解。
預設啟動限制
ASP.NET 核心模組 會設定為預設 startupTimeLimit 120 秒。 保留預設值時,在模組記錄處理序失敗之前,應用程式最多可花費兩分鐘來進行啟動。 如需有關設定模組的資訊,請參閱 aspNetCore 元素的屬性。
針對Azure App 服務進行疑難排解
重要
ASP.NET Core 預覽版本與 Azure App Service
根據預設,ASP.NET Core 預覽版本不會部署至 Azure App Service。 若要裝載使用 ASP.NET Core 預覽版本的應用程式,請參閱將 ASP.NET Core 預覽版本部署至 Azure App Service。
應用程式事件記錄檔 (Azure App 服務)
若要存取「應用程式事件記錄檔」,請使用 Azure 入口網站中的 [診斷並解決問題] 刀鋒視窗:
- 在 Azure 入口網站的 [應用程式服務] 中,開啟應用程式。
- 選取 [診斷並解決問題]。
- 選取 [診斷工具] 標題。
- 在 [支援工具] 下,選取 [應用程式事件] 按鈕。
- 檢查 [來源] 資料行中 IIS AspNetCoreModule 或 IIS AspNetCoreModule V2 項目所提供的最新錯誤。
除了使用 [診斷並解決問題] 刀鋒視窗之外,也可以使用 Kudu 來直接檢查「應用程式事件記錄檔」:
- 在 [開發工具] 區域中,開啟 [進階工具]。 選取 [ Go→ ] 按鈕。 Kudu 主控台會在新的瀏覽器索引標籤或視窗中開啟。
- 使用頁面頂端的導覽列,開啟 [偵錯主控台],然後選取 [CMD]。
- 開啟 [LogFiles] 資料夾。
- 選取檔案旁的
eventlog.xml
鉛筆圖示。 - 檢查記錄檔。 捲動至記錄檔的底部以查看最新事件。
在 Kudu 主控台中執行應用程式
許多啟動錯誤不會在「應用程式事件記錄檔」中產生實用的資訊。 您可以在 Kudu「遠端執行主控台」中執行應用程式來探索錯誤:
- 在 [開發工具] 區域中,開啟 [進階工具]。 選取 [ Go→ ] 按鈕。 Kudu 主控台會在新的瀏覽器索引標籤或視窗中開啟。
- 使用頁面頂端的導覽列,開啟 [偵錯主控台],然後選取 [CMD]。
測試 32 位元 (x86) 應用程式
目前版本
cd d:\home\site\wwwroot
- 執行應用程式:
應用程式的主控台輸出 (顯示任何錯誤) 會以管道傳送至 Kudu 主控台。
在預覽版本上執行的架構相依部署
要求安裝 ASP.NET Core {VERSION} (x86) 執行階段網站延伸模組。
cd D:\home\SiteExtensions\AspNetCoreRuntime.{X.Y}.x32
({X.Y}
是執行階段版本)- 執行應用程式:
dotnet \home\site\wwwroot\{ASSEMBLY NAME}.dll
應用程式的主控台輸出 (顯示任何錯誤) 會以管道傳送至 Kudu 主控台。
測試 64 位元 (x64) 應用程式
目前版本
- 如果應用程式是 64 位 (x64) 架構相依部署 :
cd D:\Program Files\dotnet
- 執行應用程式:
dotnet \home\site\wwwroot\{ASSEMBLY NAME}.dll
- 如果應用程式是 獨立的部署 :
cd D:\home\site\wwwroot
- 執行應用程式:
{ASSEMBLY NAME}.exe
應用程式的主控台輸出 (顯示任何錯誤) 會以管道傳送至 Kudu 主控台。
在預覽版本上執行的架構相依部署
要求安裝 ASP.NET Core {VERSION} (x64) 執行階段網站延伸模組。
cd D:\home\SiteExtensions\AspNetCoreRuntime.{X.Y}.x64
({X.Y}
是執行階段版本)- 執行應用程式:
dotnet \home\site\wwwroot\{ASSEMBLY NAME}.dll
應用程式的主控台輸出 (顯示任何錯誤) 會以管道傳送至 Kudu 主控台。
ASP.NET Core 模組 stdout 記錄檔 (Azure App 服務)
ASP.NET Core 模組 stdout 記錄檔通常會記錄「應用程式事件記錄檔」中所沒有的實用訊息。 啟用及檢視 stdout 記錄檔:
- 在 Azure 入口網站中,瀏覽至 [診斷並解決問題] 刀鋒視窗。
- 在 [選取問題類別] 底下,選取 [Web 應用程式停止運作] 按鈕。
- 在 [建議的解決方案]>[啟用 Stdout 記錄檔重新導向] 底下,選取用來開啟 Kudu 主控台以編輯 Web.Config 的按鈕。
- 在 Kudu [診斷主控台] 中,將資料夾開啟至路徑 [site]>[wwwroot]。 向下捲動以顯露位於清單底部的 web.config 檔案。
- 按一下 web.config 檔案旁邊的鉛筆圖示。
- 將 stdoutLogEnabled 設定為
true
,並將 stdoutLogFile 路徑變更為:\\?\%home%\LogFiles\stdout
。 - 選取 [儲存] 以儲存已更新的 web.config 檔案。
- 對應用程式發出要求。
- 返回 Azure 入口網站。 選取 [開發工具] 區域中的 [進階工具] 刀鋒視窗。 選取 [ Go→ ] 按鈕。 Kudu 主控台會在新的瀏覽器索引標籤或視窗中開啟。
- 使用頁面頂端的導覽列,開啟 [偵錯主控台],然後選取 [CMD]。
- 選取 [LogFiles] 資料夾。
- 檢查 [修改時間] 資料行,然後選取鉛筆圖示來編輯修改日期最新的 stdout 記錄檔。
- 當記錄檔開啟時,會顯示錯誤。
完成疑難排解時,請停用 stdout 記錄:
- 在 Kudu [診斷主控台] 中,返回路徑 [site]>[wwwroot] 以顯露 web.config 檔案。 再次選取鉛筆圖示來開啟 web.config 檔案。
- 將 stdoutLogEnabled 設定為
false
。 - 選取 [儲存] 以儲存檔案。
如需詳細資訊,請參閱適用於 IIS 的 ASP.NET Core 模組 (ANCM)。
警告
如果無法停用 stdout 記錄檔,可能會造成應用程式或伺服器發生失敗。 因為它並沒有記錄檔大小或數量上的限制。 請只在針對應用程式啟動問題進行疑難排解時,才使用 stdout 記錄。
針對 ASP.NET Core 應用程式啟動後的一般記錄,請使用會限制記錄檔大小並輪替記錄檔的記錄程式庫。 如需詳細資訊,請參閱協力廠商記錄提供者。
慢速或懸掛應用程式 (Azure App 服務)
當應用程式針對要求回應緩慢或無回應時,請參閱下列文章:
- 針對 Azure App Service 中 Web 應用程式效能變慢的問題進行疑難排解
- 使用損毀診斷程式網站延伸模組來擷取傾印,以取得 Azure Web 應用程式上的間歇性例外狀況或效能問題 \(英文\)
監視刀鋒視窗
監視刀鋒視窗為本主題稍早所述的方法提供替代的疑難排解體驗。 這些刀鋒視窗可用來診斷 500 系列的錯誤。
請確認已安裝 ASP.NET Core 延伸模組。 如果未安裝這些延伸模組,請手動安裝:
- 在 [開發工具] 刀鋒視窗區段中,選取 [延伸模組] 刀鋒視窗。
- [ASP.NET Core 延伸模組] 應該會出現在清單中。
- 如果未安裝這些延伸模組,請選取 [新增] 按鈕。
- 從清單中選擇 [ASP.NET Core 延伸模組]。
- 選取 [確定] 以接受法律條款。
- 在 [新增延伸模組] 刀鋒視窗上,選取 [確定]。
- 成功安裝延伸模組時,會有資訊快顯訊息提供指示。
如果未啟用 stdout 記錄,請依照下列步驟進行操作:
- 在 Azure 入口網站中,選取 [開發工具] 區域中的 [進階工具] 刀鋒視窗。 選取 [ Go→ ] 按鈕。 Kudu 主控台會在新的瀏覽器索引標籤或視窗中開啟。
- 使用頁面頂端的導覽列,開啟 [偵錯主控台],然後選取 [CMD]。
- 將資料夾開啟至路徑 [site]>[wwwroot],然後向下捲動以顯露位於清單底部的 web.config 檔案。
- 按一下 web.config 檔案旁邊的鉛筆圖示。
- 將 stdoutLogEnabled 設定為
true
,並將 stdoutLogFile 路徑變更為:\\?\%home%\LogFiles\stdout
。 - 選取 [儲存] 以儲存已更新的 web.config 檔案。
繼續接著啟用診斷記錄:
- 在 Azure 入口網站中,選取 [診斷記錄檔] 刀鋒視窗。
- 選取 [應用程式記錄 (檔案系統)] 和 [詳細錯誤訊息].的 [開啟] 開關。 選取刀鋒視窗頂端的 [儲存] 按鈕。
- 若要包含失敗要求追蹤 (也稱為「失敗要求事件緩衝處理」(FREB) 記錄),請選取 [失敗要求的追蹤] 的 [開啟] 開關。
- 選取 [記錄資料流] 刀鋒視窗 (列在入口網站中緊接在 [診斷記錄檔] 刀鋒視窗之下)。
- 對應用程式發出要求。
- 在記錄資料流資料內,會指出錯誤的原因。
完成疑難排解時,請務必停用 stdout 記錄。
檢視失敗要求追蹤記錄檔 (FREB 記錄檔):
- 在 Azure 入口網站中,瀏覽至 [診斷並解決問題] 刀鋒視窗。
- 從資訊看板的 [支援工具] 區域中,選取 [失敗要求追蹤記錄檔]。
如需詳細資訊,請參閱<在 Azure App Service 中針對 Web 應用程式啟用診斷記錄功能>主題的<失敗要求追蹤>一節和Azure Web 應用程式的應用程式效能常見問題集:如何開啟失敗要求追蹤?。
如需詳細資訊,請參閱在 Azure App Service 中針對 Web 應用程式啟用診斷記錄功能。
警告
如果無法停用 stdout 記錄檔,可能會造成應用程式或伺服器發生失敗。 因為它並沒有記錄檔大小或數量上的限制。
針對 ASP.NET Core 應用程式中的例行性記錄,請使用會限制記錄檔大小並輪替記錄檔的記錄程式庫。 如需詳細資訊,請參閱協力廠商記錄提供者。
針對 IIS 進行疑難排解
應用程式事件記錄檔 (IIS)
存取「應用程式事件記錄檔」:
- 開啟[開始] 功能表,搜尋 事件檢視器 ,然後選取 事件檢視器 應用程式。
- 在 [事件檢視器] 中,開啟 [Windows 記錄] 節點。
- 選取 [應用程式] 以開啟「應用程式事件記錄檔」。
- 搜尋與失敗應用程式相關的錯誤。 錯誤在 [來源] 資料行中的值會是 IIS AspNetCore Module 或 IIS Express AspNetCore Module。
在命令提示字元中執行應用程式
許多啟動錯誤不會在「應用程式事件記錄檔」中產生實用的資訊。 您可以藉由在主控系統上的命令提示字元中執行應用程式,來找出一些錯誤的原因。
架構相依部署
如果應用程式是架構相依部署:
- 在命令提示字元中,瀏覽至部署資料夾,然後使用 dotnet.exe 來執行應用程式組件以執行應用程式。 在下列命令中,將應用程式元件的名稱取代為 < assembly_name > :
dotnet .\<assembly_name>.dll
。 - 來自應用程式的主控台輸出若有顯示任何錯誤,就會寫入至主控台視窗。
- 如果向應用程式提出要求時發生錯誤,請向接聽的主機和埠 Kestrel 提出要求。 如果使用預設主機和連接埠,請對
http://localhost:5000/
發出要求。 如果應用程式在端點位址上正常 Kestrel 回應,問題就更可能與裝載組態相關,而且應用程式內的可能性較低。
自封式部署
如果應用程式是自封式部署:
- 在命令提示字元中,瀏覽至部署資料夾,然後執行應用程式的可執行檔。 在下列命令中,將應用程式元件的名稱取代為 < assembly_name > :
<assembly_name>.exe
。 - 來自應用程式的主控台輸出若有顯示任何錯誤,就會寫入至主控台視窗。
- 如果向應用程式提出要求時發生錯誤,請向接聽的主機和埠 Kestrel 提出要求。 如果使用預設主機和連接埠,請對
http://localhost:5000/
發出要求。 如果應用程式在端點位址上正常 Kestrel 回應,問題就更可能與裝載組態相關,而且應用程式內的可能性較低。
ASP.NET Core 模組 stdout 記錄檔 (IIS)
啟用及檢視 stdout 記錄檔:
- 瀏覽至主控系統上網站的部署資料夾。
- 如果 [logs] 資料夾不存在,請建立該資料夾。 如需有關如何讓 MSBuild 在部署中自動建立 [logs] 資料夾的指示,請參閱目錄結構主題。
- 編輯 web.config 檔案。 將 stdoutLogEnabled 設定為
true
,並將 stdoutLogFile 路徑變更為指向 [logs] 資料夾 (例如.\logs\stdout
)。 路徑中的stdout
是記錄檔名稱前置詞。 建立記錄檔時,系統會自動新增時間戳記、處理序識別碼及副檔名。 使用stdout
作為檔案名稱前置詞時,一般記錄檔會命名為 stdout_20180205184032_5412.log。 - 請確定您的應用程式集區身分識別具有 logs 資料夾的寫入權限。
- 儲存已更新的 web.config 檔案。
- 對應用程式發出要求。
- 瀏覽至 [logs] 資料夾。 尋找並開啟最新的 stdout 記錄檔。
- 研究記錄檔以了解錯誤。
完成疑難排解時,請停用 stdout 記錄:
- 編輯 web.config 檔案。
- 將 stdoutLogEnabled 設定為
false
。 - 儲存檔案。
如需詳細資訊,請參閱適用於 IIS 的 ASP.NET Core 模組 (ANCM)。
警告
如果無法停用 stdout 記錄檔,可能會造成應用程式或伺服器發生失敗。 因為它並沒有記錄檔大小或數量上的限制。
針對 ASP.NET Core 應用程式中的例行性記錄,請使用會限制記錄檔大小並輪替記錄檔的記錄程式庫。 如需詳細資訊,請參閱協力廠商記錄提供者。
啟用開發人員例外頁面
在開發環境中,可以將 ASPNETCORE_ENVIRONMENT
環境變數新增至 web.config 來執行應用程式。 只要主機產生器上的 UseEnvironment
不會覆寫應用程式啟動內的環境,設定該環境變數便可允許在應用程式執行時顯示開發人員例外狀況頁面。
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
只有在沒有對網際網路公開的暫存和測試伺服器上使用時,才建議為 ASPNETCORE_ENVIRONMENT
設定環境變數。 進行疑難排解之後,請從 web.config 檔案中移除環境變數。 如需有關在 web.config 中設定環境變數的資訊,請參閱 aspNetCore 的 environmentVariables 子元素。
從應用程式取得資料
若應用程式能夠回應要求、請使用終端機內嵌中介軟體從應用程式取得要求、連線與額外資料。 如需詳細資訊和範例程式碼,請參閱 ASP.NET 針對核心專案 進行疑難排解和偵錯。
緩慢或懸掛的應用程式 (IIS)
損 毀傾印 是系統記憶體的快照集,可協助判斷應用程式當機、啟動失敗或緩慢應用程式的原因。
應用程式損毀或發生例外狀況
從 Windows 錯誤報告 (WER) 取得並分析傾印:
在
c:\dumps
中建立資料夾以保存損毀傾印檔案。 應用程式集區必須具備該資料夾的寫入權限。在會導致損毀的情況下,執行應用程式。
發生損毀之後,請執行 DisableDumps PowerShell 指令碼:
在應用程式損毀且傾印收集完成之後,即可正常結束應用程式。 PowerShell 指令碼會將 WER 設定為每個應用程式收集最多五個傾印。
警告
損毀傾印可能會佔用大量磁碟空間 (每個高達好幾 GB)。
應用程式停止回應、在啟動期間失敗,或正常執行
當應用程式 停止 回應(停止回應但不會當機)、在啟動期間失敗或正常執行時,請參閱 使用者模式傾印檔案:選擇最佳工具以選取適當的工具 來產生傾印。
分析傾印
您可以使用數種方法來分析傾印。 如需詳細資訊,請參閱分析使用者模式傾印檔案。
清除套件快取
在升級開發電腦上的 .NET Core SDK 或變更應用程式內的套件版本之後,運作中的應用程式可能會立即失敗。 在某些情況下,執行主要升級時,不一致的套件可能會中斷應用程式。 大多數這些問題都可依照下列指示來進行修正:
刪除 [bin] 和 [obj] 資料夾。
藉由執行 dotnet nuget 區域變數來清除套件快取,全都 從命令殼層清除。
您也可以使用 nuget.exe 工具來完成清除套件快取,並執行 命令
nuget locals all -clear
。 nuget.exe 並未隨附在 Windows 桌面作業系統的安裝中,必須另外從 NuGet 網站取得。還原並重建專案。
在重新部署應用程式之前,請先刪除伺服器上部署資料夾中的所有檔案。
其他資源
- 針對 ASP.NET Core 專案進行疑難排解和偵錯
- Azure App Service 與 IIS 搭配 ASP.NET Core 時的常見錯誤疑難排解
- 處理 ASP.NET Core 中的錯誤
- 適用於 IIS 的 ASP.NET Core 模組 (ANCM)
Azure 文件
- ASP.NET Core 的 Application Insights \(英文\)
- 使用 Visual Studio 針對 Azure App 服務 中的 Web 應用程式進行疑難排解的遠端偵錯 Web 應用程式一節
- Azure App Service 診斷概觀
- 如何:監視 Azure App Service 中的應用程式
- 使用 Visual Studio 疑難排解 Azure App Service 中的 Web 應用程式
- 對您的 Azure Web 應用程式中「502 不正確的閘道」和「503 服務無法使用」的 HTTP 錯誤進行疑難排解
- 針對 Azure App Service 中 Web 應用程式效能變慢的問題進行疑難排解
- Azure Web 應用程式的應用程式效能常見問題集
- Azure Web 應用程式沙箱 (App Service 執行階段執行限制) \(英文\)
Visual Studio 文件
- Visual Studio 2017 中 Azure 中 IIS 上的遠端偵錯 ASP.NET Core
- Visual Studio 2017 中遠端 IIS 電腦上的遠端偵錯 ASP.NET 核心
- 了解使用 Visual Studio 進行偵錯
Visual Studio Code 文件
- 使用 Visual Studio Code 進行偵錯 \(英文\)