2009-06-01 7 views
6

Nous avons un service web .net asmx qui est appelé depuis javascript (en utilisant ASP.Net AJAX), et nécessite un accès à Session.Accès en lecture seule à une session dans un appel de service Web?

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

Nous sommes confrontés au problème de la fermeture d'une session en lecture/écriture. Est-il possible de marquer une méthode de service Web comme nécessitant un accès en lecture seule à Session?

Merci!

Répondre

0

Selon le MSDN documentation de l'attribut WebMethod, il existe plusieurs propriétés possibles, donc je ne suis pas sûr de ce que la valeur 'true' de votre attribut WebMethod va faire.

Avez-vous essayé:

[WebMethod(EnableSession=true)] 

Selon this document qui devrait vous donner un accès complet à la session.

+0

Le problème est que la méthode permet à la fois en lecture et écriture ... Je suis à la recherche d'un moyen juste activer l'accès en lecture (activer l'accès en écriture provoque le blocage lorsque vous avez plusieurs demandes simultanées). Cependant, je ne crois pas qu'il y ait un moyen. – Jonas

+2

Ah ah, maintenant je vois ... Maintenant que j'ai fait un peu plus de recherche cela n'a pas beaucoup de sens que vous pouvez définir une page pour avoir un accès en lecture seule, mais pas un service Web. Que se passe-t-il si vous placez WebMethods dans une page aspx (exposée en tant que WebMethods) et définissez la propriété EnableSessionState de la page sur ReadOnly? Ce n'est pas la meilleure solution, mais cela pourrait fonctionner. – PhillFox

4

Cette page http://msdn.microsoft.com/en-us/library/aa480509.aspx semble suggérer que la réponse est "non" - vous ne pouvez pas marquer une WebSerivce comme ayant EnableSessionState=ReadOnly.

Si vous effectuez des appels de service Web simultanés à partir du même processus, les demandes seront sérialisées sur le serveur de sorte qu'un seul sera exécuté à la fois. Contrairement aux pages .ASPX qui prennent en charge l'accès en lecture seule à l'objet HttpSessionState, ce qui permet le traitement simultané de plusieurs demandes, il n'existe aucune fonctionnalité de ce type avec les services Web ASP.NET. Tous les appels de méthode Web avec des sessions activées ont un accès en lecture/écriture et seront sérialisés dans chaque session.

Avertissement: Cet article est ancien (2002).

+0

vieux, mais semble toujours appliquer :( – quetzalcoatl

1

Ceci est un très vieux fil, mais je suis tombé dessus dans ma recherche d'une réponse à la même question.

Je trouve la réponse ailleurs où, et laissera ici pour d'autres internets à ma place:

En Global.asax vous pouvez spécifier pour chaque demande, quel accès la demande devrait avoir à l'objet de la session, et par conséquent, si elle devrait bloquer ou non.

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); 
    } 
} 

Ce service asmx façon toujours seulement ont accès en lecture seule à la session et ne bloque pas les autres demandes

Questions connexes