2009-08-12 7 views
7

Mentre facevo i miei primi tentativi Ajax, ho deciso anche di andare a usare WCF ospitato da IIS adesso. La cosa strana è che WCF non può elaborare più richieste parallele per lo stesso utente/sessione, se sessionmode è abilitato! Se sessionmode è disabilitato su asp.net, le richieste vengono elaborate parallelamente. Il broser/client può eseguire diverse richieste, alcune delle quali sono di lunga durata. Questo blocca tutti gli altri requet e rende la mia app ajax inutilizzabile.Come forzare un WCF ospitato da IIS o ASMX [webservice] per utilizzare l'oggetto di sessione in sola lettura?

Questo vale anche per asmx [webservices]. Ho avuto una grande speranza, per compilare i metodi di webservice usando l'interfaccia "IReadOnlySessionState", ma questo ha - in contrasto con le pagine web - nessuna influenza. Ma ho bisogno di accedere [la maggior parte delle volte in sola lettura] alla sessione di asp.net!

Qualcuno conosce una soluzione a questi problemi.

In ogni caso, grazie mille!

br - Mabra

risposta

0

ho trovato questo:

http://blogs.msdn.com/silverlightws/archive/2009/09/30/having-a-pollingduplex-service-and-any-other-wcf-service-in-the-same-website-causes-silverlight-calls-to-be-slow.aspx

che affermi,

"Tutti i servizi WCF richiedono lettura/scrittura lo stato della sessione se si attiva sessioni ASP.Net , che fa in modo che le risposte vengano accodate in sequenza. Idealmente, l'utente dovrebbe essere in grado di configurare il gestore WCF in modo che sia di sola lettura, il che consentirebbe ai servizi duplex di polling di funzionare con le sessioni. mista ".

... l'unica cosa che posso pensare è se c'è un modo per forzare manualmente il rilascio anticipato del blocco. Sto esaminando questo ora.

+0

Hi! Grazie per il tuo intervento! Questo spiega solo un altro motivo per NON usare WCF. Ho provato WebServices, che sembra avere lo stesso gehavoir. Anche se è più lavoro, sto usando ASMX con concurreny in atto .... MS nuove tecnoligie sono a volte da Stonehenge ... Grazie mille !! --mabra – mabra

0

È possibile fornire un provider di stato di sessione personalizzato

See: http://koolsand.blogspot.com/2010/02/why-iis-hosted-wcf-services-does-not.html

ogni volta che una richiesta contiene svc nel percorso si insinua sessione predefinita fornitore di Stato di utilizzare sola lettura bloccare e non leggere- blocco di scrittura. Quindi, utilizzando il blocco di lettura consentirà la successiva chiamata wcf da eseguire contemporaneamente.

+0

BTW .. ho trovato questo collegamento fuori dal blog di collegamento msdn postato da Ash – felickz

+0

Ehi, molto bene! Molte grazie! – mabra

+0

Peccato che usi la riflessione :( – felickz

15

In .NET 4, è possibile farlo in Application_BeginRequest

if (Context.Request.Path.EndsWith("xxx.svc")) 
    Context.SetSessionStateBehavior(SessionStateBehavior.ReadOnly); 
+0

WOW, vale la pena provare a sbarazzarsi di un sacco di seccature ...puoi chiamarlo in qualsiasi momento prima dell'evento Pipeline di AcquireRequestState – felickz

+0

Esiste un modo per trasformarlo in un comportamento personalizzato o in un attributo, quindi non è necessario specificare ogni servizio che si desidera nel file global.asax? –

Problemi correlati