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

时间:2011-06-16 13:25:47

标签: c# asp.net session-state

我想使用该会话状态,因为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,Boolean ignoreSniOpenTimeout,Int64 timerExpire,Boolean encrypt,Boolean trustServerCert,Boolean integratedSecurity)    在System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo,String newPassword,Boolean ignoreSniOpenTimeout,TimeoutTimer timeout,SqlConnection owningObject)    在System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo,String newPassword,Boolean redirectedUserInstance,SqlConnection owningObject,SqlConnectionString connectionOptions,TimeoutTimer timeout)    at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject,TimeoutTimer timeout,SqlConnectionString connectionOptions,String newPassword,Boolean redirectedUserInstance)    在System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity标识,SqlConnectionString connectionOptions,Object providerInfo,String newPassword,SqlConnection owningObject,Boolean redirectedUserInstance)    在System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions选项,Object 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()    at System.Web.Management.SqlServices.GetSqlConnection(String server,String user,String password,Boolean trusted,String connectionString)    at System.Web.Management.SqlServices.GetSqlConnection(String server,String user,String password,Boolean trusted,String connectionString)    at System.Web.Management.SqlServices.SetupApplicationServices(String server,String user,String password,Boolean trusted,String connectionString,String database,String dbFileName,SqlFeatures features,Boolean install)    在System.Web.Management.ConfirmPanel.Execute()

2 个答案:

答案 0 :(得分: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,这是该工具用来创建数据库的那个。如果你打开它,你可以看到运行的是什么。

答案 1 :(得分:0)

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

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

我希望您了解每个会话状态的优缺点,以便您可以为您的应用选择合适的会话状态。