问题归纳:

1,采用企业库Cache作为缓存后出现部分命中不到缓存对象的情况;静态变量计数器也没有按照预想的结果输出数据。

2,Session取不到的情况,出现在web.config配置为sessionState mode="InProc"

 

问题原因:

    当最大工作进程>1(=n)的时候,iis会为web应用开辟n个w3wp.exe(或者aspnet_wp.exe)来提供服务,而这些进程是独立的,包括静态变量和缓存等等,等于完全开启了一个新的应用服务器;

    当iis接受浏览器请求的时候, iis会自动分配请求到不同的服务进程,这时候,如果前后两次请求没有分配到同一个服务进程,那上一次诸如给静态变量赋的值、写入的缓存等在本次请求中得不到了。

 

问题解决:

方法一:采用 sessionState mode="stateServer" 专门开启asp.net的状态服务,让多个服务进程共享Session,配置为:<sessionState mode=”stateServer” stateConnectionString=”tcpip=xxx.xxx.xxx.xxx:xxxx″ timeout=”20″ />

方法二:采用 sessionState mode="SQLServer" 将会话存入数据库,配置为:<sessionState mode="SQLServer" sqlConnectionString="省略..." cookieless="false" timeout="20" />,注意需要初始化数据库

方法三:采用memcached来存储Session和缓存对象。

 

总结:

      目前项目中用Spring.Net和企业库的Cache都需要升级一下了。

相关文章:

  • 2021-07-11
  • 2021-06-23
  • 2021-07-25
  • 2021-05-29
  • 2021-08-25
  • 2022-01-26
  • 2022-12-23
猜你喜欢
  • 2022-01-15
  • 2022-12-23
  • 2021-11-10
  • 2022-02-18
  • 2021-10-11
  • 2021-07-26
  • 2022-12-23
相关资源
相似解决方案