Pregunta

El escenario: Tengo una aplicación PRISM desarrollado en Silverlight (4), y estoy usando una aplicación de servidor ASP.NET para alojar varias de servicios web (que, a su vez, accede a los servicios de WCF, pero eso no es realmente importante aquí). La aplicación de Silverlight debe ser capaz de llamar a los servicios web entre dominios (lo que significa que los servicios web no es necesariamente en el mismo servidor que aloja la aplicación Silverlight).

La aplicación Silverlight consta de varios módulos, el acceso a cada uno de los servicios web de ASP.NET.

No tengo mucha experiencia con Silverlight y PRISM, pero por lo que puedo ver, esto no es un escenario muy inusual ...

El problema: Mi reto es, que cuando 2 módulos distintos acceder a los servicios web, consigo 2 nuevas sesiones en el servidor web. Yo hubiera pensado que, dado que los dos módulos viven en la misma página HTML (y luego también en la misma sesión del navegador), que obtendrían la misma sesión en el servidor web ...?

He intentado que el servicio web proxy-cliente disponible a nivel mundial en el recipiente (Unity), mediante el registro de una instancia (utilizando Container.RegisterInstance), y luego conseguir este caso cada vez que necesita un módulo para hacer una web- llamada de servicio (utilizando Container.Resolve), pero esto no parece que ayuda.

Sin embargo, todas las llamadas realizadas dentro de un mismo módulo siempre se sale con la misma sesión en el servidor.

Puede alguien ver lo que me falta aquí ...?

Gracias!

Jon

¿Fue útil?

Solución

Parece que encontraron mi propia respuesta.

El problema era que mi solicitud estaba disparando varias llamadas de servicio web durante el inicio (los diferentes módulos de prisma que trabajan de forma independiente). Y cuando se hicieron varias llamadas antes de cualquier respuesta fue dada desde el servidor web, no hay ninguna sesión (y por lo tanto no se proporcionó ninguna cookie "ASP.NET_SessionId") de vuelta al cliente antes de que se hicieron las llamadas posteriores.

Mi solución era asegurarse de que marca un llamada (asíncrono como siempre), por ejemplo, a un simple ping-como servicio web, a continuación, mantenga todas las otras llamadas al servidor web hasta este la respuesta está de vuelta. Entonces, todas las llamadas posteriores se les da la misma sesión en el servidor (ya que ahora todos ellos contienen la cookie "ASP.NET_SessionId" en la cabecera).

En pratice, esta llamada es hecho por el PRISM-shell, y no hay módulos se beeing cargado antes de recibir la reponse. Entonces, estoy absolutamente seguro de que ninguno de los otros módulos de gatillo fácil conseguir antes de que tenga un estado de sesión en la mano.

Sin embargo, si alguien ve algún otro problema con esta solución, estoy más que feliz de saber de usted.

Gracias!

Jon

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top