2009-07-19 5 views
6

Ho 2 pagine ASP.IIS non invia due risposte allo stesso client contemporaneamente (solo per ASP)

Faccio una richiesta alla prima pagina da Firefox (che impiega 30 secondi per elaborare sul lato server) e durante l'esecuzione di 30 secondi faccio un'altra richiesta da Firefox alla seconda pagina (richiede meno di 1 secondo lato server), ma arriva dopo 31 secondi. Perché aspetta le prime richieste per finire.

Quando chiedo alla prima pagina da Firefox e quindi richiedere la seconda pagina da IE è solo istante.

Quindi in pratica ASP - IIS 6 in qualche modo limita ogni client a una richiesta (richiesta di elaborazione lunga) alla volta. Ho bisogno di aggirare questo problema nella mia applicazione client .NET.

Questo è testato in 3 sistemi diversi. Se vuoi testare puoi provare gli script ASP alla fine.

Questo comportamento è lo stesso in una lunga esecuzione SQL o solo in un tempo di funzionamento ASP.

Nota:

  • Non si tratta di HTTP Keep Alive
  • E 'limite di connessione non si tratta di persistente (abbiamo cercato di aumentare questo in Firefox e in .NET con Net.ServicePointManager.DefaultConnectionLimit)
  • Non si tratta di User Agent
  • Questo non accade in ASP.NET quindi presumo sia qualcosa con ASP.dll
  • I'm tryi ng per risolvere questo problema sul client e non sul server. Non ho il controllo diretto sul server è una soluzione di terze parti.

C'è un modo per aggirare questo?

Esempio di codice ASP:

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

Seconda ASP:

<% 
Response.Write "bla bla" 
%> 

risposta

8

Ciò è dovuto al modo in cui ASP gestisce sessioni. L'oggetto Session è a thread singolo e quindi è possibile accedervi solo da un thread di lavoro alla volta. Quando arriva una seconda richiesta per la stessa sessione già gestita da un thread esistente, la richiesta viene accodata da ASP finché l'oggetto di sessione non è disponibile.

Questo accade per difetto, anche se in realtà non utilizza l'oggetto della sessione nelle pagine in questione.

Quindi, quando si effettuava una richiesta da FF e l'altra da IE si avrebbero due sessioni diverse in modo che entrambe le richieste possano procedere contemporaneamente. Potresti ottenere lo stesso effetto usando due distinte istanze di IE.

Se si sa che non è mai necessario l'oggetto sessione, è possibile accedere alla configurazione dell'applicazione e disattivarla (ciò significa che nessuna pagina ASP tocca mai l'oggetto sessione). In questo caso, l'ASP consente di elaborare più richieste dalla stessa istanza del browser nello stesso momento (perché non avrebbe modo di sapere che le richieste provenivano dalla stessa istanza del browser).

Tuttavia nella maggior parte dei casi il codice ASP ha un certo uso per l'oggetto di sessione (anche solo per contrassegnare una sessione come effettuato l'accesso). In questo caso sei bloccato con questo comportamento a meno che non separi le due pagine ASP che vengono chiamate in applicazioni separate.

+0

Come mi sono perso la sessione! Ben individuato, grazie mille. –

+2

È inoltre possibile disabilitare sessione per pagina con questa pagina variabile: <% @ EnableSessionState = False%> informazioni sessione creati su altre pagine esiste ancora il suo solo il motore ASP con saltare la parte in cui rende disponinile per questa pagina solo. –

0

Hai provato a usare Response.Flush? Ciò potrebbe causare l'output bufferizzato da inviare immediatamente.

+0

Non funziona, e ho bisogno di risolverlo in una modalità più generica. Il mio client .NET dovrebbe funzionare con qualsiasi sito ASP come questo. –

0

Is IIS (o questo sito nella specifica) impostato per avere 1 max. connessioni simultanee?

+0

n. . . . –

+0

È specifico per firefox? Che ne dici di 2 richieste simultanee da IE? – shahkalpesh

+0

@shahkalpesh, se così fosse usando un'istanza IE separata causerebbe comunque il ritardo della richiesta fino al completamento di quella in FF. – AnthonyWJones

Problemi correlati