你的程序支持 IIS6 - Web Garden 吗? : y B* a% b. A1 K ) i {/ f3 T3 j
很就没有更新BLOG了呵呵。 刚过来深圳,时间都是乱来的~~~3 f" @* K+ v( {6 m
今天帮客户搞定一个部署上的问题,花了我半天的时间。。555。+ |& u( [2 u1 T5 X5 A
# Q+ c0 K4 t2 B5 I
后来才发现原来是IIS6 Web Garden的问题。) p- A! ^% }1 p
. p0 e$ k- [. ZIIS6 Web Garden 指的是一个应用程序可以成多个进程(w3wp.exe)来执行,一次请求使用其中的一个。用这个的主要目的是提高程序的可用性。当其中一个进程发生错误,那么也不会影响其他进程。发生错误的进程可以根据规则关闭,而其他的进程则可以继续工作。' G0 `* e' D7 I9 ^) C7 u; U
* C( u. B: ?& }; u$ H/ E
可惜不是每个应用程序都支持Web Garden的。 例如我做的那个就不是。/ o; p7 X* W9 \
5 `/ }% h" e. J0 R
一般来说 , 不支持 Web Garden 的原因是各应用程序的内存状态是不同的。虽然是访问同一个网站 , 当访问第一个进程时,进程的内存如果纪录了某些重要的信息,而当访问第二个进程的时,却无法再得到那些信息时,那么程序就不一定能运行正常,或者会发生错误。 3 M+ H% k0 m/ H5 i& j! H7 C ' X2 Y6 K0 c+ u( f8 V
所以,一般使用 InProc HttpSessionState / HttpApplicationState / 静态变量来储存关键信息 的程序是不支持 Web Garden的。另外平时说Session信息丢失,也和这个有关。一般很多程序都使用Cache来储存临时数据,但如果某些被修改或删除的数据没有在该进程的Cache中得到更新,那么也会很容易导致程序出错。 3 I; ~5 \% {4 z1 X+ T1 R4 l 8 U$ P3 i1 M; e2 o5 }如果你的程序用上面说的方法,并且在Windows2003/IIS6中发生奇怪的错误,那么请检查一下Web Garden的设置。 0 D/ r0 L, t1 }9 z' d ! e% R; H! {- T! X! {$ ~) o% P $ F1 ^$ n/ h6 } ~