ASP.NET 項目運行時出現錯誤提示:[HttpException (0x80004005): 無法連接到 SQL Server 會話數據庫。] ,后排查問題發現是由於項目的Session模式是使用SQLServer,(即Session信息保存在SQL Server的數據庫中)但是與數據庫的SQL連接字符串設置錯誤才導致引發這個問題。
解決方法就是修改正確的SQL連接字符串,原web.config配置文件的代碼如下:
<sessionState mode="SQLServer" sqlConnectionString ="data source=.; user id=sa; password=123" timeout="20" />
根據自己的配置修改正確的sqlConnectionString ,再次運行項目就可以正常使用了。
排查這個錯誤的時候花費了相當多時間,因為一開始並沒有認真的查看堆棧跟蹤,只看到前面的SQL Server 建立連接出錯的信息,一般這種信息都是SQL數據庫的連接字符串配置錯,但是核對了半天網站的數據庫連接都是正確的。最后才在堆棧跟蹤中看到是Session使用 mode="SQLServer",是會話數據庫配置錯誤的問題。
所以有時候出現數據庫連接錯誤,但是配置文件的設置又正確,這個時候就需要查看是否有其他的插件或者功能額外的使用了數據庫,另外這里附上我當時頁面上報錯的信息:
“/WebSite”應用程序中的服務器錯誤。
在與 SQL Server 建立連接時出現與網絡相關的或特定於實例的錯誤。未找到或無法訪問服務器。請驗證實例名稱是否正確並且 SQL Server 已配置為允許遠程連接。 (provider: SQL Network Interfaces, error: 26 - 定位指定的服務器/實例時出錯)
說明: 執行當前 Web 請求期間,出現未經處理的異常。請檢查堆棧跟蹤信息,以了解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。
異常詳細信息: System.Data.SqlClient.SqlException: 在與 SQL Server 建立連接時出現與網絡相關的或特定於實例的錯誤。未找到或無法訪問服務器。請驗證實例名稱是否正確並且 SQL Server 已配置為允許遠程連接。 (provider: SQL Network Interfaces, error: 26 - 定位指定的服務器/實例時出錯)
源錯誤:
執行當前 Web 請求期間生成了未經處理的異常。可以使用下面的異常堆棧跟蹤信息確定有關異常原因和發生位置的信息。
堆棧跟蹤:
.....................這里我省略了無用的信息,下面的才是相關重要的堆棧信息:
[HttpException (0x80004005): 無法連接到 SQL Server 會話數據庫。]
System.Web.SessionState.SqlSessionStateStore.ThrowSqlConnectionException(SqlConnection conn, Exception e) +235
System.Web.SessionState.SqlStateConnection..ctor(SqlPartitionInfo sqlPartitionInfo, TimeSpan retryInterval) +944
System.Web.SessionState.SqlSessionStateStore.GetConnection(String id, Boolean& usePooling) +231
System.Web.SessionState.SqlSessionStateStore.DoGet(HttpContext context, String id, Boolean getExclusive, Boolean& locked, TimeSpan& lockAge, Object& lockId, SessionStateActions& actionFlags) +109
System.Web.SessionState.SqlSessionStateStore.GetItemExclusive(HttpContext context, String id, Boolean& locked, TimeSpan& lockAge, Object& lockId, SessionStateActions& actionFlags) +48
System.Web.SessionState.SessionStateModule.GetSessionStateItem() +111
System.Web.SessionState.SessionStateModule.BeginAcquireState(Object source, EventArgs e, AsyncCallback cb, Object extraData) +778
System.Web.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +285
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155