zoukankan      html  css  js  c++  java
  • web.config中的InProc模式 与 StateServer模式[转]

    开发asp.net应用时,修改web.config中的SessionState节点。

    <sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="120"/> 
    

    <sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="120"/>

    InProc模式
    优点:获取session状态的速度快,session状态直接存储在iis的进程中。
    缺点:易丢失,经常需要重新登录

    StateServer模式
    优点:session状态单独存储在一个进程中,不会因为iis或者应用的重启而丢失状态
    缺点:获取session状态的速度比InProc慢一些,毕竟是两个不同的进程。

    在开发的时候,对应用有一点修改,就会导致应用的重启,这时候如果使用InProc模式
    ,那么每次都需要重新登录,比较浪费时间.建议使用StateServer模式。并在iis里面设置超时时间长一些。

    注:使用StateServer模式的时候
    1、要开启“ASP.NET State Service”服务(设为“自动”)

    2、如果stateConnectionString的值不是127.0.0.1或者localhost等代表本地地址的值,需要修改注册表:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesaspnet_state Parameters 节点 → 将 AllowRemoteConnection 的键值设置成“1”(1 为允许远程电脑的连接,0 代表禁止)→ 设置 Port (端口号)

    3、session中存储非序列化的对象,如果违反会抛出 无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序列化,则适用同样的限制。这样的异常。如果向session存储自定义的对象,那么该对象的类上一定要加上[Serializable]注释。


    inProc模式(缺省模式)

    它允许“无Cookie”的会话,以及在服务器之外存储会话数据。ASP.NET会话状态模块在Web.config文件中像下面这样配置:

    <sessionState mode="InProc" cookieless="false" timeout="20" />

    在这个例子中,mode属性设为InProc(默认值),表明会话状态要由ASP.NET存储到内存中,而且不用Cookie来传递会话ID。采取这种方式,不管Cookie还是隐藏表单字段都用不着了。

    所以,即使网页中没有使用表单,也能加入会话。 但是这种方法,应用程序的状态将依赖于 ASP.NET进程, 当IIS进程崩溃或者正常重启时,保存在
    进程中的状态将丢失。

  • 相关阅读:
    epoll的LT和ET(转)
    js和jQuery的互相转换
    Spring的回滚问题
    Spring的事务
    分布式锁的实现方式
    xml是什么
    ajax的4个字母分别是什么意思
    try、catch、finally都有return语句时执行哪个
    静态变量、实例变量、局部变量线程安全吗,为什么
    String和StringBuilder、StringBuffer的区别
  • 原文地址:https://www.cnblogs.com/gsk99/p/6274138.html
Copyright © 2011-2022 走看看