2012-10-20 27 views
0

我知道ASP.NET使用工作线程为请求提供服务。因此,客户端A和客户端B可以发出请求,同时处理这些请求。ASP.NET - 针对同一客户端的多个工作线程

客户端是否可以同时发出多个请求。请参阅下面的代码:

Imports System.Threading 
Partial Class Default5 
    Inherits System.Web.UI.Page 

    Dim intCount1 As Integer, intCount2 As Integer 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     'If Session("Test") = "" Then 
     Session("Test") = Request.QueryString("ID") 
     'End If 
     Response.Write(Session("Test")) 
    End Sub 
End Class 

Imports System.Threading 
Partial Class Default4 
    Inherits System.Web.UI.Page 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     If Session("Test") <> "" Then 
      For intCount1 = 0 To 10 
       Response.Write(Session("Test") & "," & intCount1 & "<br>") 
       Thread.Sleep(1000) 
      Next 
     End If 
    End Sub 
End Class 

请打开Default5.aspx通过specifiying这个网址:default5.aspx ID = 1,并用这个URL打开另一个页面:default5.aspx ID = 2?。然后从default5.aspx?id = 1的浏览器中打开导航到default4.axpx(通过指定URL),并在运行时,从default5.aspx?id = 2打开,从浏览器导航到default4.axpx。在这两种情况下的结果是:

2,0 
2,1 
2,2 
2,3 
2,4 
2,5 
2,6 
2,7 
2,8 
2,9 
2,10 

两种情况下的会话变量都是2(我明白为什么会这样)。请看我昨天问的问题:ASP.NET - Accessing web page twice from client。在这个例子中,两种情况下会话变量都不是2。

我的问题是; ASP.NET可以同时处理来自同一客户端的多个请求。赢得回应似乎表明一次处理一个请求。

回答

0
My question is; can ASP.NET process multiple requests 
from the same client at the same time. 

是,如果你禁用会话,或使用与处理程序进行会话,或做你的一个完全自定义会话。

它也可以帮助,如果你使用一个以上的池相同的Web应用程序作出"web garder"

您还可以阅读:
ASP.NET Server does not process pages asynchronously
Trying to make Web Method Asynchronous
Web app blocked while processing another web app on sharing same session
What perfmon counters are useful for identifying ASP.NET bottlenecks?
Replacing ASP.Net's session entirely

+0

你是什么意思:“如果你禁用会话”?我在问题中提供的示例代码使用会话变量。谢谢。 – w0051977

+0

@ w0051977是的我看到使用会话变量作为测试的例子,如果您需要它们,并且无法避免它们,您无法使用来自asp.net的现有会话代码 - 所以您需要使自定义会话句柄代码(因为这个原因,我做了一个,并不是那么难) – Aristos

+0

@ w0051977会话实际上是将用户的cookie与数据库中的一行连接起来,这些数据库保留了一些数据。 – Aristos

0

对于任何人找到这篇文章,如果哟ü不需要会话写访问,宣布只读访问ASP.NET允许同时运行的要求,因为它没有获得会话锁:

在网页:

EnableSessionState="ReadOnly" 

还是在通用通过执行的处理程序:

IReadOnlySessionState