当前位置: 移动技术网 > IT编程>开发语言>.net > 小心!ASP.NET网站发布时的那些坑

小心!ASP.NET网站发布时的那些坑

2017年12月08日  | 移动技术网IT编程  | 我要评论

王黎雯个人资料,王开洲,别用下辈子安慰我

开发工具: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网站第一次访问慢的解决方法

二、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数据库。具体方法可在网上查询。

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网