加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

带有allowCustomSqlDatabase =“true”的ASP.NET SessionState不

发布时间:2020-12-16 06:49:39 所属栏目:asp.Net 来源:网络整理
导读:这里的Microsoft文档 http://msdn.microsoft.com/en-us/library/h6bb9cz9(v=vs.90).aspx 和几篇SO文章表明,在ASP.NET web.config文件的sessionState声明中指定allowCustomSqlDatabase =“true”将允许我使用默认的ASPState数据库覆盖并指定我自己的数据库名
这里的Microsoft文档

http://msdn.microsoft.com/en-us/library/h6bb9cz9(v=vs.90).aspx

和几篇SO文章表明,在ASP.NET web.config文件的sessionState声明中指定allowCustomSqlDatabase =“true”将允许我使用默认的ASPState数据库覆盖并指定我自己的数据库名称.

我在web.config文件中设置了这些属性.

<sessionState allowCustomSqlDatabase="true" mode="SQLServer" sqlConnectionString="Data Source=mysqlservername;Initial Catalog=DR_ASPState;Integrated Security=true;Connect Timeout=15;" />

当我尝试调出默认网站页面时,收到一条错误消息,指出无法访问ASPState数据库.

我已使用SQL事件探查器监视SQL流量,并注意到此故障是由此请求引起的:

SELECT @appId = AppId
FROM [ASPState].dbo.ASPStateTempApplications
WHERE AppName = @appName

我已经回收了应用程序池并重新启动了IIS,试图刷新可能存在的任何缓存的数据库名称引用,但这没有帮助.我的理解是ASP.NET SessionState将使用我指定的数据库名称DR_ASPState来生成它用于连接到SessionState数据库的SQL语句.但看起来似乎[ASPState]被硬编码到框架中.

任何人都可以发现我做错的任何事情或提供有关如何解决这个问题的有用的故障排除信息吗?

解决方法

我发现了这个问题.我们的IT团队通过恢复现有ASPState数据库的备份创建了自定义ASP会话状态数据库DR_ASPState.但是,仅提供不同的名称不会更改使用硬编码数据库引用生成的存储过程.

该网站正在调用我的连接字符串中定义的正确备用数据库DR_ASPState.但是,.NET命令生成的至少一个存储过程在存储过程语句中具有硬编码的数据库名称.

使用SQL事件探查器,我发现这是使用重命名的数据库导致问题的语句

declare @p2 int
set @p2=NULL
exec dbo.TempGetAppID @appName='/LM/W3SVC/10/ROOT',@appId=@p2 output
select @p2

检查存储过程dbo.TempGetAppID显示如下语句:

SELECT @appId = AppId
FROM [ASPState].dbo.ASPStateTempApplications
WHERE AppName = @appName

根据此处.NET文档中的说明,通过正确安装DR_ASPState作为新数据库,可以正确解决此问题.

http://msdn.microsoft.com/en-us/library/ms229862(v=vs.80).aspx

该声明应该从我们的Web服务器执行.

aspnet_regsql.exe -S *servername* -E -ssadd -sstype c –d DR_ASPState

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读