2009-06-01 17 views
6

Abbiamo un servizio web asmx .net che viene chiamato da javascript (usando ASP.Net AJAX) e richiede l'accesso a Session.Accesso di sola lettura alla sessione in una chiamata di servizio Web?

[WebMethod(true)] 
public string DoSomethingOnTheServer() { } 

Stiamo incontrando il problema della sessione bloccata su una richiesta di lettura/scrittura. C'è un modo per contrassegnare un metodo di servizio web come richiesto l'accesso in sola lettura a Session?

Grazie!

risposta

0

In base allo MSDN documentation dell'Attributo WebMethod ci sono diverse proprietà possibili, quindi non sono sicuro di quale sarà il valore "vero" nel proprio Attributo WebMethod.

Hai provato:

[WebMethod(EnableSession=true)] 

Secondo this document che dovrebbe dare pieno accesso alla sessione.

+0

Il problema è che il metodo permette di leggere e scrivere l'accesso ... Sto cercando un senso per attivare solo l'accesso in lettura (l'attivazione dell'accesso in scrittura causa il blocco quando si hanno più richieste simultanee). Tuttavia, non credo che ci sia un modo. – Jonas

+2

Ah ah, ora vedo ... Ora che ho fatto un po 'più di ricerca, non ha molto senso che tu possa impostare una pagina per avere accesso solo in lettura, ma non un servizio web. Cosa succede se si mettono i WebMethod in una pagina aspx (esposti come WebMethods) e si imposta la proprietà EnableSessionState della pagina su ReadOnly? Non è la soluzione migliore, ma potrebbe funzionare. – PhillFox

4

Questa pagina http://msdn.microsoft.com/en-us/library/aa480509.aspx sembra suggerire che la risposta è "no" - non è possibile contrassegnare un WebSerivce come con EnableSessionState=ReadOnly.

Se si effettuano chiamate di servizi Web simultanee dallo stesso processo, le richieste verranno serializzate sul server in modo che solo una verrà eseguita in qualsiasi momento. A differenza delle pagine .ASPX che supportano l'accesso in sola lettura all'oggetto HttpSessionState, che consente l'elaborazione simultanea di più richieste, non esiste tale funzionalità con i servizi Web ASP.NET. Tutte le chiamate di metodi Web con sessioni abilitate dispongono dell'accesso in lettura/scrittura e verranno serializzate all'interno di ciascuna sessione.

Avviso: questo articolo è vecchio (2002).

+0

vecchio, ma sembra ancora applicare :( – quetzalcoatl

1

Questo è un thread molto vecchio, ma mi sono imbattuto in esso nella mia ricerca di una risposta alla stessa domanda.

ho trovato la risposta altrove, e vi lascerà qui per altri internet a casa mia:

In Global.asax è possibile specificare per ogni richiesta, che cosa accedere alla richiesta deve avere l'oggetto della sessione, e quindi se dovrebbe bloccare o no. servizi ASMX

private void Application_BeginRequest(object sender, EventArgs e) 
{ 
    // This will set the session to read only for asmx services 
    // This will make the asmx services non blocking for other requests as it doesnt lock the session object 
    if (Context.Request.Path.Contains(".asmx/")) 
    { 
     Context.SetSessionStateBehavior(SessionStateBehavior.ReadOnly); 
    } 
} 

questo modo sempre e solo hanno accesso in sola lettura alla sessione e non bloccherà altre richieste

Problemi correlati