在 IIS 上連接 .NET Core 專案所使用的 SQL Sever 資料庫

將專案透過 Web Deploy 到 IIS 上之後

瀏覽網頁卻看到錯誤

HTTP Error 500.30 - ANCM In-Process Start Failure
Common solutions to this issue:
The application failed to start
The application started but then stopped
The application started but threw an exception during startup
Troubleshooting steps:
Check the system event log for error messages
Enable logging the application process' stdout messages
Attach a debugger to the application process and inspect
For more information visit: https://go.microsoft.com/fwlink/?LinkID=2028265



有兩種方法可以看到詳細的錯誤訊息

1. 將專案資料匣下的 web.config 檔案中的 stdoutLogEnabled 設定為 true

stdoutLogEnabled="true"


然後瀏覽網頁,再到專案資料夾下找一個名稱為 logs 的資料夾,即可看到紀錄訊息的檔案



像我這次遇到的錯誤是

fail: Microsoft.EntityFrameworkCore.Database.Command[20102]

      Failed executing DbCommand (12ms) [Parameters=[], CommandType='Text', CommandTimeout='60']

      CREATE DATABASE [sio];

crit: Microsoft.AspNetCore.Hosting.Diagnostics[6]

      Application startup exception

Microsoft.Data.SqlClient.SqlException (0x80131904): ???? 'master' ?,CREATE DATABASE ??????



這樣的訊息感覺是在說資料庫的權限有問題

但檢查好幾次資料庫的帳號權限是正確的

而且自行執行專案中的 .exe 檔案也能正常執行


搞不清楚到底是哪裡有問題,所以只好透過方式 2 來檢視相關訊息

2. 查看事件檢視器


訊息比 logs 資料夾詳細,而且有中文,比較好閱讀

Exception: 
Microsoft.Data.SqlClient.SqlException (0x80131904): 於資料庫 'master' 中,CREATE DATABASE 的權限遭拒。




查看此時間點附近的訊息

發現是 使用者 'NT AUTHORITY\SYSTEM' 的登入失敗。 原因: 無法開啟明確指定的資料庫 'sio'。 [CLIENT: <local machine>]


開啟 ssms ,調整 NT AUTHORITY\SYSTEM 權限




重新整理網頁,發現一樣有錯誤

訊息變成:使用者 'IIS APPPOOL\API' 的登入失敗。 原因: 無法開啟明確指定的資料庫 'sio'。 [CLIENT: <local machine>]

這邊 IIS APPPOOL\API 的 API 是我 IIS 網站的名稱



所以回到 IIS 的設定,開啟應用程式集區

點擊 API 之後再按進階設定



將識別欄位從 ApplicationPoolIdentity 改為 LocalService,或是 LocalSystem 試試看





重新瀏覽網頁即可

留言

這個網誌中的熱門文章

CPE 一顆星選集題目說明與解答 - Java 筆記與心得分享

Visual Studio 自動排版格式化程式碼

1. Vito's family (CPE10406, UVA10041) - CPE一顆星解答與說明