使用IIS Express编辑文件后面的代码后会话丢失

时间:2013-03-22 00:36:17

标签: asp.net iis iis-7 iis-7.5 iis-express

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

这种行为似乎基本上是一个iisreset和一个app pool循环。

这会减慢开发和测试速度,我想至少在可能的情况下停止会话。我不是在.aspx文件中编辑文件背后的代码。当我使用Cassini Web服务器

时,这种情况从未发生过

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

1 个答案:

答案 0 :(得分: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会话正常工作时遇到问题的地方。据我所知,你必须在cmd调用aspnet_regsql.exe中声明数据库名称,这样你就可以包含-sstype c选项,这样你就可以正确地集成安全设置。 (顺便说一句,微软提供数据库的默认名称是ASPState,我建议你坚持使用)。您还需要在<system.web>父元素中添加的web.config元素中声明allowCustomSqlDatabase =“true”。具有讽刺意味的是,如果您坚持使用默认名称ASPState,则不需要在sqlConnectionString属性中声明数据库名称,即使allowCustomSqlDatabase属性与您的会话状态数据库具有自定义名称直接相关。

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

您必须向数据库中的应用程序池用户授予以下权限: take from this article

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

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