Pregunta

Estoy usando el canal de WCF PollingDuplexHttpBinding para empujar las notificaciones a los clientes de Silverlight. En su mayor parte funciona bien pero estoy luchando para conseguir unas cuantas funciones de gestión de sesión de base para que funcione correctamente.

El mayor problema que tenemos es tratando de dejar que el servidor saber que el cliente ha terminado con una sesión y ya no requiere ninguna notificación. La llamada CloseAsync en el cliente deja el lado del cliente del canal de envío de solicitudes de nuevas notificaciones para esa sesión única y también envía una solicitud closeSession SOAP para el servidor. El problema es el lado del servidor del canal devuelve un 404 diciendo que no reconoce la acción closeSession. Por lo que yo puedo ver que el error es de la parte interna del canal PollingDuplexHttpBinding y no lo hace a la aplicación para que el cierre de sesión puede ser debidamente atendidos.

¿Alguien más ha encontrado con este problema y tal vez encontrado una manera de evitarlo?

¿Fue útil?

Solución

No se puede hacer por el aspecto, Quejas sobre PollingDuplexHttpBinding .

Otros consejos

Bien dicho artículo queja es simplemente impresionante, e indirectamente resuelto un problema relacionado he tenido con Silverlight trabajando muy lentamente cuando se hace Duplex a través de HTTP. Bsaically, el problema es causado por tener ASP.Net estado de sesión activa en el sitio web y el uso de pila BroserHttp de Silverlight (en lugar de pila ClientHttp).

Yavor hace un buen trabajo (en este artículo) de explicar el problema:

http://blogs.msdn.com/b/silverlightws/archive/2009/09/30/having- a-pollingduplex-servicio-y-cualquier-otra-WCF-servicio-in-the-mismas-Website-causas-silverlight-llamadas-a-ser-slow.aspx

La solución simple, si usted está teniendo este problema es registrar una ruta para la pila ClientHttp antes de invocar a su servicio. Esto se puede lograr mediante una llamada telefónica:

WebRequest.RegisterPrefix(requestUri.AbsoluteUri, WebRequestCreator.ClientHttp);

Cuando RequestURI es un URI de su servicio. Espero que esto ayude.

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