使用LocalDB部署Asp.Net MVC網站時遇到的問題


首先一句話介紹LocalDB。LocalDB是SQLServer的文件數據庫,類似於SQLite。它擁有SQLServer的絕大部分功能,簡單易用。但部署LocalDB到生產系統是不推薦的。本文部署是一個內部微系統,數據庫僅僅只用來做一個最基本的用戶認證而不做其他。基於此,決定直接試用LocalDB部署。

之前對LocalDB並不了解,雖然說其類似於SQLite,但SQLite是 一個生產用數據庫,而LocalDB更像是基於體驗的。系統經過基本調試、驗證后,直接試用Visual Studio發布到遠程的Windows 2008 SP1系統。打開網站,網站報錯。

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. 
Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 50 - Local
Database Runtime error occurred. Cannot create an automatic instance. See the Windows Application event log for error details.

經過搜索,在StackOverflow以及MSDN上都有相關的描述。主要是LocalDB與Full IIS應用不兼容,需要按照某一個補丁,進行額外設置。我不確定最新的IIS是否已經兼容,至少在Windows 2008 Serve R2上的IIS版本不兼容。在Using LocalDB with Full IIS, Part 1: User Profile[1]一問中有更加詳細的描述。按照其Part1的設置,網站依然沒有跑起來。在Windows 7 SP1 causes IntelliTrace Collection to fail on IIS[2]提到了不兼容的補丁信息,以及如何解決。

 

着急之下,直接在服務器上安裝SQLServer Express。如果LocalDB不建議部署,准備直接遷移到Express。在一些參考上,又提到SQL Server Runtime,可能是沒有安裝Express的原因。安裝完SQLServer Express,網站依然無法正常工作。在下載Express時,看到還有一個下載選項為CHS\x64\SqlLocalDB.msi 。可能此程序才是LocalDB的Runtime。遂卸載 SQLServer Express,安裝SQlLocalDB。再次運行網站,錯誤信息變為如下:

//大概是這個意思
找不到SQLServer進程
無法啟動實例

看來LocalDB還需要與SqlServer Express協同工作。安裝好之后,再次啟動網站,錯誤依舊。

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance
name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 50 - Local Database Runtime error occurred. 在 LocalDB
實例啟動期間出錯: 無法啟動 SQL Server 進程。 )

在[1][2]中提到還需要設置IIS的應程序池信息,之前沒有改變是因為我以試用Administrator身份運行此程序。按照[1][2]的方法,增加應用程序池設置。

<add name="ASP.NET v4.0" autoStart="true" managedRuntimeVersion="v4.0">
    <processModel identityType="SpecificUser" userName="administrator" password="**********" loadUserProfile="true" setProfileEnvironment="true" />
</add>

本Web App主要進行服務器管理,與操作系統(Win32 Api)交互較多,部分Api需要很高權限。在以上設置中增加了loadUserProfile="true" setProfileEnvironment="true" ,賦予程序池讀取用戶配置、環境參數的能力。重新啟動應用程序池,App正常運行。

回過頭來看,如果要部署LocalDB到IIS 可以參考Deployment of SQL Express LocalDB on IIS[3]。就此次實踐來說,大概要經過這么幾部:

  1. 環境為Widnows 2008 R2
  2. 需要安裝SQL Server Express,安裝SqlLocalDB.
  3. 需要配置C:\Windows\System32\inetsrv\config\applicationHost.cof,賦予應用程序池讀取用戶數據、環境數據的信息。

 網站開始正常工作了,可本地調試的LocalDB的文件並不能復用,必須新建否則會報錯。內置的管理員賬戶沒有了,數據如何導入LocalDB呢?

 

參考:

[1]Using LocalDB with Full IIS, Part 1: User Profile, https://blogs.msdn.microsoft.com/sqlexpress/2011/12/08/using-localdb-with-full-iis-part-1-user-profile/

[2]Windows 7 SP1 causes IntelliTrace Collection to fail on IIS, https://support.microsoft.com/zh-cn/kb/2547655

[3]Deployment of SQL Express LocalDB on IIS, https://blogs.msdn.microsoft.com/gaurav/2013/12/21/deployment-of-sql-express-localdb-on-iis/

[3]Stack Overflow上的提問, http://stackoverflow.com/questions/26248293/sql-network-interfaces-error-50-local-database-runtime-error-occurred-canno


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM