Dict.CN 在线词典, 英语学习, 在线翻译

先记录下过程:

1。修改配置文件

<system.web>
<!-- 让其在跨站点访问时,使SESSION能共用 -->
<httpCookies domain="CSDN.Net" />
<!-- 设置Session模式为SQLServer -->
<sessionState mode="SQLServer" sqlConnectionString="Data Source=127.0.0.1;User ID=ASPState;Password=ASPState;" timeout="60" />
</system.web>
2。修改 ASPState的TempGetAppID存储过程,让不同的站点保持同一个AppId。

因为实在找不到可以自定义AppName的方法,只有出此下策了。

/**//*

获取AppId

修改过程,使其只生成一个AppId

*/
CREATE PROCEDURE dbo.TempGetAppID
@appName tAppName,
@appId int OUTPUT
AS

SET @appName = LOWER(@appName)
SET @appId = NULL

--查询AppName对应的AppId
--次处进行了修改,使每个AppId都是一样.
SELECT top 1 @appId = AppId
FROM [tempdb].dbo.ASPStateTempApplications
--WHERE AppName = @appName

--如果没有查询到AppId
IF @appId IS NULL
BEGIN
BEGIN TRAN
--锁定模式查询
SELECT @appId = AppId
--SELECT top 1 @appId = AppId
FROM [tempdb].dbo.ASPStateTempApplications WITH (TABLOCKX)
WHERE AppName = @appName

--如果没有查询到AppId
IF @appId IS NULL
BEGIN
--获取AppName的HashCode
EXEC GetHashCode @appName, @appId OUTPUT

--插入新AppId
INSERT [tempdb].dbo.ASPStateTempApplications
VALUES
(@appId, @appName)

IF @@ERROR = 2627
BEGIN
DECLARE @dupApp tAppName

SELECT @dupApp = RTRIM(AppName)
FROM [tempdb].dbo.ASPStateTempApplications
WHERE AppId = @appId

RAISERROR('SQL session state fatal error: hash-code collision between applications ''%s'' and ''%s''. Please rename the 1st application to resolve the problem.',
18, 1, @appName, @dupApp)
END
END
COMMIT
END

RETURN 0
GO

 

网上有很多方式,但都不是我的环境所需要的

1。修改站点的IIS元数据
IIS站点有不同的Id(/LM/W3SVC/1009009583/Root,ID是1009009583,一般通常是1),此方法适合多服务器间的站点集群(同一台服务器上把站点ID修改为相同为出现站点错乱)。
有关解决服务器之间应用程序路径不同的问题的步骤信息,请参见位于 http://support.microsoft.com/default.aspx?ln=zh-cn 上的 Microsoft 知识库中的文章 325056“PRB: Session State Is Lost in Web Farm If You Use SqlServer or StateServer Session Mode”(PRB:如果使用 SqlServer 或 StateServer 会话模式则会在网络场中丢失会话状态)。

posted @ 2009-04-22 17:31 无名-小卒 阅读(322) 评论(0) 编辑

因为公司有多台服务器,所以session要保存在sql server上,因此要在数据库中建立存放session的数据库ASPState,

在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727下找到了生成ASPState的sql:InstallSqlState.sql

马上打开,放到查询分析器里执行,怪了,在这里出问题了,报出了如下错误:

 
-----------------------------------------
Starting execution of InstallSqlState.SQL
-----------------------------------------
--------------------------------------------------
Note:                                            
Do not run this file manually.                   
You should use aspnet_regsql.exe to install      
and uninstall SQL session state.                 
 
Run 'aspnet_regsql.exe -?' for details.        
--------------------------------------------------
If the job does not exist, an error from msdb.dbo.sp_delete_job is expected.
消息 14262,级别 16,状态 1,过程 sp_verify_job_identifiers,第 67 行
指定的 @job_name ('ASPState_Job_DeleteExpiredSessions')不存在。
If the category already exists, an error from msdb.dbo.sp_add_category is expected.
消息 14261,级别 16,状态 1,过程 sp_add_category,第 32 行
指定的 @name ('[Uncategorized (Local)]')已存在。
 
------------------------------------------
Completed execution of InstallSqlState.SQL
------------------------------------------

这段里说要运行aspnet_regsql.exe 来创建,为什么要这样搞呢?

于是打开VS2005命令提示,输入:aspnet_regsql.exe -?

出现了aspnet_regsql.exe的说明,往下拉会看到"会话状态选项",有一命令:-ssadd(Session state add?) 解释说:添加对 sqlserver 模式会话状态的支持.

估计就是这个了,输入: aspnet_regsql.exe -ssadd

提示:请指定用户ID,或对受信任的连接使用-E

输入如下:aspnet_regsql.exe -ssadd -E

成功.

 

也可以指定用户名:aspnet_regsql.exe -ssadd -U sa

会提示输入密码.正确输入后也会执行成功.

 

删除该功能的话执行aspnet_regsql.exe -ssremove -E

就OK了.

 

 

本博客内容公供学习研究用,和工作内容无关.
posted @ 2009-04-22 16:45 无名-小卒 阅读(480) 评论(0) 编辑