问题归纳:
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都需要升级一下了。