在 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"
像我這次遇到的錯誤是
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. 查看事件檢視器
訊息比 logs 資料夾詳細,而且有中文,比較好閱讀
Exception:
Microsoft.Data.SqlClient.SqlException (0x80131904): 於資料庫 'master' 中,CREATE DATABASE 的權限遭拒。
查看此時間點附近的訊息
發現是 使用者 'NT AUTHORITY\SYSTEM' 的登入失敗。 原因: 無法開啟明確指定的資料庫 'sio'。 [CLIENT: <local machine>]
重新整理網頁,發現一樣有錯誤
訊息變成:使用者 'IIS APPPOOL\API' 的登入失敗。 原因: 無法開啟明確指定的資料庫 'sio'。 [CLIENT: <local machine>]
這邊 IIS APPPOOL\API 的 API 是我 IIS 網站的名稱
所以回到 IIS 的設定,開啟應用程式集區
點擊 API 之後再按進階設定
將識別欄位從 ApplicationPoolIdentity 改為 LocalService,或是 LocalSystem 試試看
留言
張貼留言