小心!ASP.NET网站发布时的那些坑
开发工具:vs2010,mvc4.0,sqlserver2008
服务器:windows server 2012,iis8,sqlserver2012
一、发布后,每个页面第一次打开都很卡,50秒或更长,第二次打开就很快了
估计原因:编译速度慢,但在有vs环境的机器上发布没有这么卡
解决办法:
使用高版本的vs,“在发布期间预编译”; 使用iis8的application initialization功能 1. 使用vs2017“在发布期间预编译”
发布时遇到一个报错:
在应用程序级别之外使用注册为 allowdefinition='machinetoapplication' 的节是错误的。如果在 iis 中没有将虚拟目录配置为应用程序,则可能导致此错误。
解决办法:发布时注释web.config中的以下代码
<!--<authentication mode="forms"> <forms loginurl="~/account/login" timeout="2880" /> </authentication>-->
2. 使用iis8的application initialization功能
二、asp.net session 频繁丢失问题
问题现象:登录后30秒左右会话丢失,需要重新登录。
解决办法:asp.net有几种会话状态模式,默认为“inproc模式”,改为“stateserver模式”,问题解除。
1. off模式
即关闭session。
全站关闭session可在web.config文件中的<system.web>节中写入:
<sessionstate mode="off">
要在某个页面上关闭session,可在页面上添加:
<%@ page enablesessionstate="false" %>
2. inproc模式(缺省模式)
如果未在web.config文件中配置sessionstate mode,默认即是inproc模式。
如果要定制inproc模式的参数,需要写入web.config文件,例如:
<sessionstate mode="inproc" cookieless="false" timeout="20" />
cookieless设置是否允许不使用cookie,timeout设置超时时间,单位为分钟。
inproc模式依赖于 asp.net进程, 当iis进程崩溃或者重启时,保存在进程中的会话状态会丢失。
3. stateserver模式
stateserver模式是将会话数据存储到单独的内存缓冲区中,由一个windows服务“asp.net state service ”(需要在windows服务中开启)来控制这个缓冲区,需要设置stateconnectionstring:
<sessionstate mode="stateserver" stateconnectionstring="tcpip=127.0.0.1:42424" timeout="20" />
使用stateserver模式时,所有需要保存在session中的类,都要加上可序列化的特性:
[serializable]
public class someclass { }
stateserver模式的优点是独立于iis进程,iis应用程序的重启不影响会话数据。
4. sqlserver模式
使用sql server来保存session,即使iis重启,session仍然不会丢失。需要先创建aspstate数据库。具体方法可在网上查询。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。