查看一个非常简单的Web项目,托管在IIS中,带有一个简单的aspx页面,执行一些代码(从db获取一些数据并填充一些控件),以下哪项是正确的:
每个页面请求共享代码隐藏类的相同实例 或者每个页面请求都在自己的代码隐藏类实例中运行。
是否针对每个aspx页面运行一个线程/实例。或者一个线程/实例覆盖多个页面?
我试图理解,在一个简单的Web项目中,它接收100个页面请求,它们会一个接一个地连续运行,还是每个请求有多个实例/线程?
答案 0 :(得分:5)
因此,Web服务器可以并行处理多个请求,但当然可以同时为多少个请求提供服务。
答案 1 :(得分:2)
每个请求都有一个代码后面的代码实例。
嗯,实际上它是aspx页面类的一个实例,它继承自类后面的代码。 (这就是为什么你在后面的代码中使用protected
关键字作为事件处理程序的原因,以便继承类可以访问它们。)
还有一个Server.Transfer
或Server.Execute
的情况,然后请求转移到另一个页面实例。
在IIS处理请求中运行了多个线程,并且通常在一个线程中处理一个请求,但在某些情况下可以将请求从一个线程移动到另一个线程。
如果100个请求到达服务器,它将开始在单独的线程中处理其中一些请求,并将其余的请求放入队列中。值得注意的是,服务器每次只处理一个页面,因此除非你使用无会话页面(使它们匿名),否则它不会为并行线程中的同一用户处理两个页面,这使得整个线程部分成为一个页面很容易。
答案 2 :(得分:1)
也许看一下异步ASP.NET?
http://msdn.microsoft.com/en-us/magazine/cc163725.aspx
通常会为新请求分配新线程。
“正常或同步的页面在请求期间保留在线程上,防止该线程被用于处理其他请求。”