IIS 連線 LocalDB

  • 1146
  • 0

IIS 連線 LocalDB 的設定方式

LocalDB 是微軟開發的一個輕量級的資料庫,適合在系統開發的過程中使用及測試。一般我們在 Visual Studio 連線 LocalDB 來執行程式時,大致上不會遇到什麼問題,當你把 Web 系統發佈到本機的 IIS,並且準備連線到 LocalDB 做測試時,就會開始出現鬼打牆的現象,各種錯誤訊息接連出現,只能一個一個上網找解答,最後才發現,原來答案就在下一個轉角的地方。這裡的執行環境是 Windows 8、IIS 8.5、Visual Studio Community 2019、ASP.NET Core 5,這個過程記錄如下。

建立網站

我們在 IIS 管理員建立一個 HrAdm 網站,然後開啟 IIS 組態檔 C:\Windows\System32\inetsrv\config\applicationHost.config,找到 HrAdm 的應用程式集區 設定,確認 loadUserProfile、setProfileEnvironment 這兩個欄位值為 true,如下圖,如果欄位不存在則手動增加:

IIS 安裝套件

由於開發的平台是 ASP.NET Core 5,在微軟的 .Net Core 5 下載網站它建議你下載安裝 Hosting Bundle 版本,裡面包含 Server Hosting 和 ASP.NET Core Runtime Library,安裝之後在 IIS 管理員的模組裡面可以看到多了一個項目,如下圖:

建立 LocalDB shared instance

在上圖中我們建立了一個 HrAdm 網站,同時我們會將 Web 系統發佈到這個網站,當 HrAdm 系統啟動時,它會使用 IIS APPPOOL\HrAdm 這個帳號來連線 LocalDB,但是 LocalDB 並不認識這個帳號,所以在這裡我們必須建立一個 shared instance。建立之前,先用系統管理員身份開啟一個 command 視窗,輸入 sqllocaldb i,來查看目前的 instance,如下圖有一個 mssqllocaldb:

接著執行以下 script,它會建立一個 shared instance 同時重新啟動它,名稱為 mssqllocaldbShared:

sqllocaldb share mssqllocaldb mssqllocaldbShared
sqllocaldb stop .\mssqllocaldbShared
sqllocaldb start .\mssqllocaldbShared

再查詢一次,mssqllocaldbShared 已經產生了,注意一下,它的路徑有些不一樣:

建立資料庫帳號

要讓 IIS 的帳號 存取 LocalDB 的資料庫 我們必須在資料庫建立這個帳號,進入 SSMS(SQL Server Management Studio) 連線到 LocalDB 之後,開啟一個查詢視窗,然後執行以下 script,資料庫系統會建立這個帳號同時賦予管理者的權限:

create login [IIS APPPOOL\HrAdm] from windows;
exec sp_addsrvrolemember N'IIS APPPOOL\HrAdm', sysadmin

執行之後,你可以在 SSMS 看到這個帳號:

修改連線字串

HrAdm 系統的連線字串必須指向 LocalDB 的 shared instance,如下圖,另外要注意的是它的路徑前面有一個點號,底下第一個反斜線為跳脫字元:

完成以上的設定之後,發佈到 IIS 的 HrAdm 系統就可以正常操作了,如以下畫面: