2009-07-19 28 views
6

我有2個ASP頁面。IIS不會同時向同一客戶端發送兩個響應(僅適用於ASP)

我向Firefox的第一頁發送請求(,需要30秒鐘在服務器端處理),並且在執行30秒期間,我會從Firefox執行另一個請求到第二頁(小於在服務器端1秒),但它在31秒後纔會出現。因爲它等待第一個請求完成。

當我向Firefox請求第一個頁面,然後從IE請求第二個頁面時,它只是一瞬間。

所以基本上ASP-IIS 6不知何故限制每個客戶端一次請求(長處理請求)。我需要在.NET客戶端應用程序中解決這個問題。

這是在3個不同的系統測試。如果你想測試,你可以嘗試最後的ASP腳本。

此行爲在長時間的SQL執行中或僅在耗時的ASP操作中是相同的。

注:

  • 這不是HTTP的Keep Alive
  • 這不是永久連接限制(我們試圖增加這在Firefox,並與Net.ServicePointManager.DefaultConnectionLimit .NET)
  • 這不是關於用戶代理
  • 這不會發生在ASP.NET中,所以我認爲這是與ASP.dll
  • 我是tryi在客戶端而不是服務器上解決這個問題。我沒有直接控制服務器,這是第三方解決方案。

有沒有辦法解決這個問題?

示例ASP代碼:

第一個ASP:

<% 
Set cnn = Server.CreateObject("Adodb.Connection") 
cnn.Open "Provider=sqloledb;Data Source=.;Initial Catalog=master;User Id=sa;Password=;" 
cnn.Execute("WAITFOR DELAY '0:0:30'") 
cnn.Close 
%> 

二ASP:

<% 
Response.Write "bla bla" 
%> 

回答

8

這是由於ASP管理會話的方式。 Session對象是單線程的,因此一次只能由一個工作線程訪問。當第二個請求到達同一個會話時,已經由一個現有線程處理,該請求由ASP排隊,直到會話對象可用。

即使您沒有在相關頁面中實際使用會話對象,也會出現這種情況。

因此,當您從FF發出一個請求並從IE發出另一個請求時,您將有兩個不同的會話,因此這兩個請求可以同時進行。使用兩個不同的IE實例可以獲得相同的效果。

如果你知道你永遠不需要會話對象,你可以進入應用程序配置並關閉它(這意味着沒有ASP頁面會觸及會話對象)。在這種情況下,ASP將允許同時處理來自同一瀏覽器實例的多個請求(因爲它無法知道請求來自同一個瀏覽器實例)。

但是在大多數情況下,ASP代碼對會話對象有一些用處(甚至只是將會話標記爲已登錄)。在這種情況下,除非將被調用的兩個ASP頁面分隔爲單獨的應用程序,否則您會遇到此行爲。

0

你試圖使用Response.Flush?這可能會導致緩衝輸出立即發送。

+0

它不起作用,我需要在更一般的模式下解決這個問題。我的.NET客戶端應該像這樣的任何ASP網站。 – 2009-07-19 17:32:04

0

IIS(或特定網站)設置爲最大1。併發連接?

+0

否 。 。 。 – 2009-07-19 19:34:53

+0

這是特定於Firefox嗎?如何處理來自IE的2個併發請求? – shahkalpesh 2009-07-19 20:15:56

相關問題