2009-07-19 3 views
6

Ich habe 2 ASP-Seiten.IIS sendet nicht zwei Antworten gleichzeitig an denselben Client (nur für ASP)

Ich habe eine Anfrage auf die erste Seite von Firefox (, die 30 Sekunden dauert auf Server-Seite zu verarbeiten), und während der Ausführung von 30 Sekunden ich eine andere Anfrage von Firefox auf die zweite Seite (dauert weniger als 1 Sekunde in der Server-Seite), aber es kommt nach 31 Sekunden. Weil es auf erste Anforderungen wartet, um zu beenden.

Wenn ich auf die erste Seite von Firefox anfordern und dann die zweite Seite von IE anfordern, ist es nur sofort.

Also im Grunde ASP - IIS 6 irgendwie begrenzt jeden Client auf eine Anfrage (lange Verarbeitung Anfrage) zu einer Zeit. Ich muss dieses Problem in meiner .NET-Client-Anwendung umgehen.

Dies wird in 3 verschiedenen Systemen getestet. Wenn Sie testen möchten, können Sie die ASP-Skripte am Ende ausprobieren.

Dieses Verhalten ist in einer langen SQL-Ausführung oder nur in einer zeitaufwendigen ASP-Operation identisch.

Hinweis:

  • Es ist nicht über HTTP Keep Alive
  • Es geht nicht um dauerhafte Verbindung Grenze (wir haben versucht, mit Net.ServicePointManager.DefaultConnectionLimit dies in Firefox und in .NET zu erhöhen)
  • Es geht nicht um User Agent
  • Dies passiert nicht in ASP.NET, also nehme ich an, es ist etwas mit ASP.dll
  • Ich bin tryi ng dies auf dem Client nicht den Server zu lösen. Ich habe keine direkte Kontrolle über den Server, es ist eine Lösung von Drittanbietern.

Gibt es eine Möglichkeit, um dies zu umgehen?

Beispiel ASP-Code:

Erste 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 
%> 

Zweite ASP:

<% 
Response.Write "bla bla" 
%> 

Antwort

8

Dies ist aufgrund der Art, wie ASP Sitzungen verwaltet. Das Session-Objekt ist single threaded und kann daher nur von jeweils einem Worker-Thread aufgerufen werden. Wenn eine zweite Anforderung für dieselbe Sitzung eintrifft, die bereits von einem vorhandenen Thread verarbeitet wird, wird diese Anforderung von ASP in die Warteschlange gestellt, bis das Sitzungsobjekt verfügbar ist.

Dies geschieht standardmäßig, auch wenn Sie das Sitzungsobjekt in den fraglichen Seiten nicht tatsächlich verwenden.

Wenn Sie also eine Anfrage von FF und die andere von IE machen, hätten Sie zwei verschiedene Sitzungen, so dass beide Anfragen gleichzeitig ablaufen können. Sie könnten den gleichen Effekt mit zwei verschiedenen Instanzen von IE haben.

Wenn Sie wissen, dass Sie das Sitzungsobjekt nie benötigen, können Sie in die Anwendungskonfiguration wechseln und es deaktivieren (dies würde bedeuten, dass keine ASP-Seite jemals das Sitzungsobjekt berührt). In diesem Fall würde ASP ermöglichen, dass mehrere Anfragen von derselben Browserinstanz gleichzeitig verarbeitet werden (weil es keine Möglichkeit hätte, zu wissen, dass die Anfragen von derselben Browserinstanz stammen).

In den meisten Fällen wird jedoch ASP-Code für das Sitzungsobjekt verwendet (auch wenn nur eine Sitzung als angemeldet markiert ist). In diesem Fall bleiben Sie bei diesem Verhalten hängen, es sei denn, Sie trennen die beiden aufgerufenen ASP-Seiten in separate Anwendungen.

+0

Wie habe ich die Sitzung verpasst! Gut entdeckt, vielen Dank. –

+2

Sie können auch Sitzung pro Seite mit dieser Seitenvariable deaktivieren: <% @ EnableSessionState = False%> Sitzungsinfo erstellt auf anderen Seiten noch besteht nur die ASP-Engine mit dem Teil überspringen, wo es für diese Seite verfügbar macht nur. –

0

Haben Sie versucht Response.Flush zu benutzen? Das kann dazu führen, dass die gepufferte Ausgabe sofort gesendet wird.

+0

Es funktioniert nicht, und ich muss das in einem allgemeineren Modus lösen. Mein .NET Client sollte mit jeder ASP-Site wie dieser arbeiten. –

0

Ist IIS (oder diese Website im Speziellen) auf 1 max. gleichzeitige Verbindungen?

+0

Nr. . . . –

+0

Ist das spezifisch für firefox? Wie wäre es mit 2 gleichzeitige Anfragen von IE? – shahkalpesh

+0

@shahkalpesh, wenn dies so wäre mit einer separaten IE Instanz würde immer noch die Anfrage zu verzögern, bis die in FF abgeschlossen ist. – AnthonyWJones

Verwandte Themen