如何使用会话状态模式:带有 VS2010 的 SQL Server

Posted

技术标签:

【中文标题】如何使用会话状态模式:带有 VS2010 的 SQL Server【英文标题】:How to use Session state mode : SQL Server with VS2010 【发布时间】:2011-09-16 09:19:20 【问题描述】:

我想使用那个会话状态,因为 Inproc 不可靠。我需要在配置文件中设置该模式,但不知道如何......有人可以帮助我吗?

我从 aspnet_regsql 工具得到的异常

xception:

无法连接到 SQL Server 数据库。


失败详情

System.Web.HttpException (0x80004005):无法连接到 SQL Server 数据库。 ---> System.Data.SqlClient.SqlException (0x80131904):建立与 SQL Server 的连接时发生网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接) 在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔 breakConnection) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 在 System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo,SqlInternalConnectionTds connHandler,布尔 ignoreSniOpenTimeout,Int64 timerExpire,布尔加密,布尔 trustServerCert,布尔集成安全) 在 System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo,字符串 newPassword,布尔型 ignoreSniOpenTimeout,TimeoutTimer 超时,SqlConnection owningObject) 在 System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo,字符串 newPassword,布尔重定向用户实例,SqlConnection owningObject,SqlConnectionString connectionOptions,TimeoutTimer 超时) 在 System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject,TimeoutTimer 超时,SqlConnectionString connectionOptions,字符串 newPassword,布尔重定向用户实例) 在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity 标识,SqlConnectionString 连接选项,对象 providerInfo,字符串 newPassword,SqlConnection owningObject,布尔重定向用户实例) 在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions 选项,对象 poolGroupProviderInfo,DbConnectionPool 池,DbConnection owningConnection) 在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection,DbConnectionPool 池,DbConnectionOptions 选项) 在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) 在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) 在 System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory) 在 System.Data.SqlClient.SqlConnection.Open() 在 System.Web.Management.SqlServices.GetSqlConnection(字符串服务器,字符串用户,字符串密码,布尔值信任,字符串 connectionString) 在 System.Web.Management.SqlServices.GetSqlConnection(字符串服务器,字符串用户,字符串密码,布尔值信任,字符串 connectionString) 在 System.Web.Management.SqlServices.SetupApplicationServices(字符串服务器、字符串用户、字符串密码、布尔可信、字符串连接字符串、字符串数据库、字符串 dbFileName、SqlFeatures 功能、布尔安装) 在 System.Web.Management.ConfirmPanel.Execute()

【问题讨论】:

在谷歌中提出第一个答案的问题是不是很糟糕? 真的,我确实在谷歌上看过。我没有找到一个简单的答案.. 不像 Aristos 提供给我的那么容易 【参考方案1】:

如果您没有在 sql 上创建会话数据库,您首先需要运行一个工具来使用aspnet_regsql.exe 工具创建它。

DATABASENAME = AnyNameOfServerState
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>aspnet_regsql.exe -ssadd -sstype c -d DATABASENAME -E

此工具的更多信息:http://msdn.microsoft.com/en-us/library/ms229862(VS.80).aspx

其次,您可以使用集成安全性进行连接,而无需使用用户名和密码。 在连接字符串上设置它

<add name="SqlState" connectionString="Data Source=localhost;DataBase=AnyNameOfServerState;Integrated Security=True" providerName="System.Data.SqlClient"/>

这个转到system.web

<sessionState mode="SQLServer" sqlConnectionString="SqlState" allowCustomSqlDatabase="true" cookieless="false" timeout="20"/>

更多细节。如果您转到您的 net 目录,您会看到一个带有 .sql 扩展名的文件列表。其中之一是 InstallSqlState.sql,这是该工具运行以创建数据库的文件。如果你打开它,你可以看到运行的是什么。

【讨论】:

阿里斯托斯。如何在 Visual Studio 2010 中使用该工具? @Matric001 这是一个命令行工具,你打开一个 cmd 窗口,你只需在你的计算机上运行一次命令。在服务器上,我希望您的提供商已经做好了一切准备。如果您只是将会话数据库移动到服务器本地目录并使用它,则需要确保每分钟触发一次清除工具。 @Matrix001 打开cmd窗口,->开始->运行|键入 cmd 并按回车键。然后将目录更改为您最后一个网络框架目录。 我在没有任何命令行的情况下将工具作为向导运行..我将 AnyNameServerState..放在服务器名称选项中..但它给了我一个无法连接的异常异常..见上文 @Matrix001 可能你没有安装 sql server。你呢?【参考方案2】:

您也可以使用 StateServer。您可以在此处按照分步指南进行操作

http://dotnetguts.blogspot.com/2009/06/steps-for-session-inproc-mode-to.html

我希望您了解每种会话状态的优缺点,以便您可以为您的应用程序选择正确的一种。

【讨论】:

SQL server 更可靠.. 可靠性对我来说很关键.. 如果用户使用不同服务器上的多个 Web 应用程序,StateServer 更可靠

以上是关于如何使用会话状态模式:带有 VS2010 的 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

带有控制台/Windows服务示例VS2010的signalR自主机

在调试模式下尝试将预编译头文件与 VS2010 (VC100) 一起使用时,如何消除错误 C2859?

如何防止模态盒关闭?

在wildlfy9中,如何在独立模式下使用两个节点进行有状态的ejb会话复制(集群)

vs2010 调试快捷键

你如何打开一个带有完成处理程序的 FBSession,它不会被保留并在每次会话状态更改时调用?