7
votes

Comment forcer un IIS hébergé WCF ou ASMX [WebService] à utiliser Objet de session Readonly?

Tout en faisant mes premières tentatives Ajax, j'ai également décidé d'aller utiliser la WCF hébergé IIS maintenant. L'étrange chose est que le WCF ne puisse pas traiter plusieurs demandes parallèles pour le même utilisateur / session, si la sessionMode est activée! Si SessionMode est désactivé sur ASP.NET, les demandes sont traitées parallèlement. Le broser / client peut exécuter plusieurs demandes différentes, où certaines d'entre elles sont longues. Cela bloque toutes les demandes supplémentaires et rend mon application Ajax inutilisable.

Ceci s'applique également à ASMX [Webservices]. J'avais un grand espoir, de compiler les méthodes Webservice à l'aide de l'interface "IreadonlySitulyState", mais celle-ci a - in Opsevie aux pages Web - aucune influence. Mais j'ai besoin d'accès [la plupart des temps libéonnamment] à la session ASP.NET!

Est-ce que quelqu'un connaît une solution à ces problèmes.

Quoi qu'il en soit, merci beaucoup!

BR - Mabra


0 commentaires

3 Réponses :


0
votes

J'ai trouvé ceci:

http://blogs.msdn.com/silverlightws/archive/2009/09/30/WUMING-A-PollingDupplex -service-and-anone-ONT-WCF-Service-SERVICE-IN-the-Site Web-Causes-Silverlight-appels-appels-to-Be-Slow.aspx

quels états,

"Tous les services de WCF nécessitent un accès à l'état de la session de lecture / écriture Si vous activez les sessions ASP.NET, ce qui provoque la file d'attente de la mise en file d'attente de manière séquentielle. Idéalement, l'utilisateur doit être en mesure de configurer le gestionnaire WCF uniquement, ce qui permettrait de sonder le duplex. services pour travailler avec des sessions. Malheureusement, cela n'est pas pris en charge à ce stade. "

... La seule chose à laquelle je puisse penser, c'est s'il y a un moyen de forcer manuellement la libération anticipée de la serrure. Je regarde cela maintenant.


1 commentaires

Salut ! Merci pour votre publication! Cela explique juste une autre raison de ne pas utiliser WCF. J'ai essayé desservices, ce qui semble avoir le même gehavoir. Bien que ce soit plus de travail, j'utilise ASMX avec une concurrence en place ... MS Nouveaux technoligies sont parfois de Stonehenge ... merci beaucoup !! --Mabra



0
votes

Vous pouvez fournir un fournisseur d'état de session personnalisé

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

Chaque fois qu'une demande contient SVC dans le chemin it intime la session par défaut Fournisseur d'État à utiliser une serrure de lecture et pas la lecture-écriture. Alors en utilisant LOCK LISOONLY permettra à la prochaine WCF appel à être exécuté simultanément.


2 commentaires

Btw .. j'ai trouvé ce lien du blog de lien MSDN posté par Ash


Dommage qu'il utilise la réflexion :(



15
votes

in .NET 4, vous pouvez le faire dans Application_BeGinRequest CODE>

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


2 commentaires

Wow, vaut la peine d'essayer de me débarrasser d'une tonne de tracas ... Vous pouvez appeler cela à tout moment avant l'événement de pipeline AcquireRequestState


Y a-t-il une façon que vous puissiez transformer cela en un comportement personnalisé ou un attribut, vous n'avez donc pas besoin de spécifier chaque service que vous souhaitez cela dans votre fichier global.aSax?