-1

所以我有一个正在开发的 ASP.NET 4.0 Web 表单项目。我的本地主机网络服务器是 IIS Express。如果我编辑一个 aspx 文件并点击保存 IIS Express 会重新加载所有符号并清除当前会话。

该行为似乎基本上是 iisreset 和应用程序池回收。

这会减慢开发和测试的速度,我希望至少在可能的情况下停止丢失会话。我不是在编辑 .aspx 文件中的 HTML 文件后面的代码。这在我使用 Cassini 网络服务器时从未发生过

PS numRecompilesBeforeAppRestart 不是我的问题的解决方案,因为它的默认值为 20。

4

1 回答 1

0

我将 ASP.NET 移到了一个数据库中,无论如何这更可靠。谷歌搜索这个并没有带回一个明确的方法来做到这一点。以下是配置 SQL Server 以存储 ASP.NET 会话状态的方法:

不要手动运行任何 SQL 脚本。转到 C:\Windows\Microsoft.NET\Framework\v4.0.30319 并运行以下命令:

aspnet_regsql.exe -S [server]-U [username] -P [password] -d ASPState -ssadd -sstype c 

如果您使用集成安全性,请在命令执行中包含 -E 而不是用户名和密码。集成安全性是您在使 ASP.NET 会话正常工作时遇到问题的地方。据我所知,您必须在对 aspnet_regsql.exe 的 cmd 调用中声明数据库名称,以便您可以包含 -sstype c 选项,以便正确设置集成安全性。(顺便说一下,微软给数据库的默认名称是 ASPState,我建议你坚持使用)。您还需要在您添加的 web.config 元素中声明 allowCustomSqlDatabase="true"<system.web>父元素。具有讽刺意味的是,如果您坚持使用默认名称 ASPState,则无需在 sqlConnectionString 属性中声明数据库名称,即使 allowCustomSqlDatabase 属性与会话状态数据库的自定义名称直接相关。

 <sessionState
            mode="SQLServer"
            sqlConnectionString="Server=[database_ip];Trusted_Connection=true;"
            cookieless="false"
            timeout="20" 
            allowCustomSqlDatabase="true"
    />

您必须为数据库中的应用程序池用户授予以下权限: 摘自本文

将应用程序池用户添加到 ASPState 数据库的用户登录中,将他与 db_datareader 和 db_datawriter 角色相关联

打开 ASPState 数据库的“属性”对话框,选择“权限”选项卡并为应用程序池用户提供 ASPState 数据库的 EXECUTE/SELECT/INSERT/DELETE/UPDATE 权限。

于 2013-03-25T04:25:19.377 回答