add name="stopappdomainrestartonfolderdelete"
type="mywebsite.stopappdomainrestartonfolderdeletemodule" />
需要说明的是,"stopappdomainrestartonfolderdelete"为自定义的任意名称,"mywebsite"为上述.cs文件中的命名空间,一般为项目名称."stopappdomainrestartonfolderdeletemodule"为上述.cs文件中的类名.
这就是它。 这将防止文件夹删除appdomain重新启动,但修改web.config和bin文件夹时仍会重新启动,这正是我们想要的。
但是多删除几个文件就会发现session还是会过期,为什么会是这样的呢?现在还没搞清楚...于是在网上搜索就有了下面的这种方式
在 <system.web>下面配置session的保存方式为stateserver就可以了
<sessionstate mode="stateserver" statenetworktimeout="20"
stateconnectionstring="tcpip=127.0.0.1:42424" />using system.reflection;
using system.web;
namespace mywebsite
{
/// <summary>
/// stops教程 the asp教程.net appdomain being restarted (which clears
/// session state, cache etc.) whenever a folder is deleted.
/// </summary>
public class stopappdomainrestartonfolderdeletemodule : ihttpmodule
{
public void init(httpapplication context)
{
propertyinfo p = typeof(httpruntime).getproperty("filechangesmonitor",
bindingflags.nonpublic | bindingflags.public | bindingflags.static);
object o = p.getvalue(null, null);
fieldinfo f = o.gettype().getfield("_dirmonsubdirs",
bindingflags.instance | bindingflags.nonpublic | bindingflags.ignorecase);
object monitor = f.getvalue(o);
methodinfo m = monitor.gettype().getmethod("stopmonitoring",
bindingflags.instance | bindingflags.nonpublic);
m.invoke(monitor, new object[] { });
}
public void dispose() { }
}
}