你的程序支持 IIS6 - Web Garden 吗?2 ~( n( P S0 G/ R
5 s( i b V- T
很就没有更新BLOG了呵呵。 刚过来深圳,时间都是乱来的~~~( Z- g# ]" h/ f* s! h6 M4 _" o, F% d) N
今天帮客户搞定一个部署上的问题,花了我半天的时间。。555。% f5 `5 k& I- g! S" R. t
9 K3 e. }8 k4 u2 M
后来才发现原来是IIS6 Web Garden的问题。& h3 h+ e% B9 {( C) d- P
8 I, s: u1 ?: |+ A
IIS6 Web Garden 指的是一个应用程序可以成多个进程(w3wp.exe)来执行,一次请求使用其中的一个。用这个的主要目的是提高程序的可用性。当其中一个进程发生错误,那么也不会影响其他进程。发生错误的进程可以根据规则关闭,而其他的进程则可以继续工作。/ s# `' U) s W
6 O, m# w) T& U; W+ a/ N0 R& T# o
可惜不是每个应用程序都支持Web Garden的。 例如我做的那个就不是。 - \8 x9 C2 [ E0 x / | W! h+ b4 Z一般来说 , 不支持 Web Garden 的原因是各应用程序的内存状态是不同的。虽然是访问同一个网站 , 当访问第一个进程时,进程的内存如果纪录了某些重要的信息,而当访问第二个进程的时,却无法再得到那些信息时,那么程序就不一定能运行正常,或者会发生错误。1 B& U" R6 ^; \
& @- z' ~/ n* h# x7 y: o& W" E( ]所以,一般使用 InProc HttpSessionState / HttpApplicationState / 静态变量来储存关键信息 的程序是不支持 Web Garden的。另外平时说Session信息丢失,也和这个有关。一般很多程序都使用Cache来储存临时数据,但如果某些被修改或删除的数据没有在该进程的Cache中得到更新,那么也会很容易导致程序出错。 2 A: `! _1 j6 H- l* @1 A% c5 E6 i9 J5 _% B' b0 q* z# j V. b
如果你的程序用上面说的方法,并且在Windows2003/IIS6中发生奇怪的错误,那么请检查一下Web Garden的设置。 & g* l( M3 E, p% T