2011-10-21 14 views
7

estoy corriendo en un problema extraño con una llamada de servicio web crossdomain en Silverlight 4.clientaccesspolicy.xml no solicitará la primera vez en algunos navegadores

Inmediatamente después de comenzar, la aplicación llama a un servicio web en el mismo host desde donde se ha descargado pero en un puerto diferente (por ejemplo, la aplicación reside en http://www.mydomain.com:80 y el servicio web está en http://www.mydomain.com:81). Sin SSL involucrado. El host proporciona un archivo clientaccesspolicy.xml adecuado y todo funciona correctamente la mayor parte del tiempo (como 99.9%).

En algunos casos, sin embargo, el navegador no solicita clientaccesspolicy.xml y, como resultado, la llamada al servicio web se bloquea y falla con un error entre dominios.

En el caso típico de esto es la secuencia de solicitudes que se ve con Fiddler o Chrome herramientas de desarrollo:

  • index.html (la página que aloja la aplicación Silverlight)
  • silverlight.js
  • aplicaciones .xap
  • clientaccesspolicy.xml (solicitado y descargado correctamente)
  • llamada de servicio web

En algunos casos, sin embargo sólo se ve

  • index.html (la página que aloja la aplicación Silverlight)
  • silverlight.js
  • application.xap
  • -> Error de dominios (sin clientaccesspolicy solicitado, sin llamada de servicio web).

Esto sólo ocurre en una minoría de máquinas (todo con Windows 7) si se cumplen todas estas condiciones:

  • aplicación que se ejecuta dentro de Chrome, Firefox o fuera del navegador (IE siempre funciona)
  • es la primera vez que se carga la página (es decir, si se golpea botón de recarga del navegador el problema desaparece. Cerrar el navegador/reinicio y la primera vez que todavía tiene el problema)
  • sin Fiddler en ejecución (si ejecuta el tráfico a través de Fiddler, el problema desaparece). Sin embargo, las herramientas de desarrollo de Chrome no tienen ningún efecto.
  • la máquina se encuentra dentro del mismo dominio que la aplicación servidor. Si accede a la página desde una red externa (con la misma máquina), el problema no está allí.

En esas máquinas, en esas circunstancias, el problema es 100% reproducible.

¿Qué podría estar causando esto? ¿Qué pasos puedo realizar para rastrear el problema?

Respuesta

11

Este problema es obviamente bastante raro, pero con algo de ayuda de Microsoft que he encontrado la solución. Lo estoy publicando para referencia futura, así que espero que this no vuelva a suceder. Como medida de seguridad, Silverlight bloquea cualquier llamada entre dominios entre la zona de Internet y la zona de Intranet local. En ese caso, ni siquiera solicita clientaccesspolicy.xml. Por lo tanto, si la aplicación está alojada en www.myhost.com (zona de Internet), Silverlight le impide llamar a un servicio web en www.another.com (zona de Intranet local).

This blog post explica en detalle.

Así que si usted tiene uno o varios de los siguientes síntomas (a pesar de haber desechado los errores obvios, como un crossdomain clientaccesspolicy.xml malformada o fuera de lugar):

  • error crossdomain de algunas máquinas aparentemente aleatorios (varios lugares diferentes/domains), pero trabajando desde otras máquinas
  • clientaccesspolicy.xml no solicitado en absoluto
  • funciona con algunos navegadores, no funciona con otros. Aparentemente al azar, a veces no funciona con ningún navegador.
  • veces no hay problema cuando violinista está abierto, pero el error sin violinista corriendo
  • todo funciona correctamente en el servidor local

Puede valer la pena intentar lo siguiente, con el fin de poner el host de la aplicación y el servicio web en la misma zona de seguridad:

  • ir a la configuración de seguridad de iE (estos valores también son utilizados por cualquier aplicación que acceda a la red, es decir, cualquier otro navegador también)
  • añadir el complemento O prima que aloja la aplicación y la dirección que aloja el servicio web a la Intranet local sitios O
  • desmarque la bandera "Detectar redes intranet automáticamente" (para que ambos terminan en la zona Internet)
+1

Podría besarte señor. –

+1

También deseo besarte. Esto resolvió un problema que nos impedía avanzar con IIS Smooth Streaming. – theChrisKent

Cuestiones relacionadas