让我们在网站上有2页成像:快速和慢速。慢速页面请求执行1分钟,请求快速5秒。
整个我的开发生涯我认为如果第一次启动请求很慢:他将对DB进行(同步)调用...等待回答...如果在此期间请求快速页面将完成,此请求将在系统等待来自DB的响应时进行处理。
但今天我发现: http://msdn.microsoft.com/en-us/library/system.web.httpapplication.aspx
HttpApplication类的一个实例用于在其生命周期中处理许多请求。但是,它一次只能处理一个请求。因此,成员变量可用于存储每个请求数据。
这是否意味着我原来的想法是错的?
请您澄清一下他们的意思?我很确定这件事情正如我所期待的那样......
答案 0 :(得分:6)
如果两个请求都使用具有读/写访问权限的相同会话状态,则必须在服务器端按顺序处理请求,因为asp.net会话锁定。
您可以在此处找到更多信息: http://msdn.microsoft.com/en-us/library/ie/ms178581.aspx
并发请求和会话状态
对每个会话的访问ASP.NET会话状态是独占的,这意味着如果两个不同的用户发出并发请求,则同时授予对每个单独会话的访问权限。但是,如果对同一会话发出两个并发请求(通过使用相同的SessionID值),则第一个请求将获得对会话信息的独占访问权。第二个请求仅在第一个请求完成后执行。 (如果由于第一个请求超过锁定超时而释放信息的独占锁定,则第二个会话也可以访问。)如果@ Page指令中的EnableSessionState值设置为ReadOnly,则只读请求会话信息不会导致会话数据的独占锁定。但是,会话数据的只读请求可能仍然需要等待会话数据的读写请求设置的锁定才能清除。
答案 1 :(得分:4)
您的原始想法是正确的,文档也是如此。 IIS工作进程可以生成许多线程,每个线程都有自己的HttpApplication
类实例。
答案 2 :(得分:4)
ASP .NET将在单个工作进程(w3wp.exe)下为您的Web应用程序托管多个AppDomain。它甚至可以在同一个工作进程下为不同的Web应用程序共享AppDomain(如果它们被分配到同一个应用程序池中)。
ASP .NET创建的每个AppDomain都可以托管多个HttpApplication实例,这些实例为请求提供服务并遍历ASP .NET生命周期。每个HttpApplication都可以(如你所说)一次响应一个请求。