HttpException (0x80004005): 无法连接到 SQL Server 会话数据库
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