2009-08-12 22 views
7

Al hacer mis primeros intentos de ajax, decidí también utilizar IIS WCF alojado ahora. Lo extraño es que WCF no puede procesar varias solicitudes en paralelo para el mismo usuario/sesión, ¡si el modo de sesión está habilitado! Si el modo de sesión está deshabilitado en asp.net, las solicitudes se procesan en paralelo. El broser/cliente puede ejecutar varias solicitudes diferentes, donde algunas de ellas son de larga ejecución. Esto bloquea todos los requets adicionales y hace inutilizable mi aplicación ajax.¿Cómo forzar a un WCF alojado en IIS o ASMX [webservice] a usar el objeto de sesión de solo lectura?

Esto también se aplica a asmx [webservices]. Tenía una gran esperanza, para compilar los métodos de servicio web utilizando la interfaz "IReadOnlySessionState", pero esto tiene, en oppsite para páginas web, ninguna influencia. ¡Pero necesito acceder [la mayoría de las veces de forma leída] a la sesión de asp.net!

¿Alguien sabe alguna solución a este problema.

De todos modos, muchas gracias!

br - Mabra

Respuesta

0

encontré esto:

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

que dice:

"Todos los servicios de WCF requieren lectura/escritura estado de sesión si se habilita sesiones ASP.Net , lo que hace que las respuestas se coloquen en cola de forma secuencial. Idealmente, el usuario debería poder configurar el controlador WCF para que sea de solo lectura, lo que permitiría que los servicios dúplex de sondeo funcionen con las sesiones. Desafortunadamente, esto no se admite en este caso. unt. "

... lo único que se me ocurre es si hay alguna forma de forzar manualmente la liberación anticipada del bloqueo. Estoy investigando eso ahora.

+0

Hola! Gracias por su publicación! Esto explica simplemente otra razón para NO usar WCF. Probé WebServices, que parece tener el mismo gehavoir. Aunque es más trabajo, estoy usando ASMX con concurreny en su lugar ... MS nuevas tecnologías a veces son de stonehenge ... ¡Muchas gracias! --mabra – mabra

0

Puede proporcionar un proveedor de estado de sesión personalizado

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

cada vez que una solicitud contiene SVC en el camino da a entender sesión predeterminada proveedor de estado para utilizar sólo lectura bloquear y no leer- escribir bloqueo Por lo tanto, al usar , el bloqueo de solo lectura permitirá que la próxima llamada wcf se ejecute al mismo tiempo.

+0

BTW .. encontré este enlace fuera del blog de enlace msdn publicado por Ash – felickz

+0

¡Hola, muy bien! ¡Muchas gracias! – mabra

+0

Lástima que utiliza la reflexión :( – felickz

15

En .NET 4, se puede hacer esto en Application_BeginRequest

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

WOW, vale la pena intentar deshacerse de una tonelada de molestias ...puede llamar a esto en cualquier momento antes del evento AcquireRequestState pipeline – felickz

+0

¿Hay alguna manera de que pueda convertir esto en un comportamiento personalizado o un atributo, para que no tenga que especificar cada servicio que desee en su archivo global.asax? –

Cuestiones relacionadas