2009-09-01 10 views
5

que tiene una aplicación de Silverlight (alojado en intranet.mydomain.net) y un servicio de WCF al (webservices.mydomain.net)Silverlight servicio WCF entre dominios Pregunta

¿Es necesario un archivo de política a través del sitio? De ser así, ¿cómo se vería si solo permitiera el acceso desde intranet.mydomain.net?

Respuesta

4

Sí, necesitará un archivo clientaccesspolicy.xml en la RAÍZ de su dominio de servicio (webservices.mydomain.net).

De forma predeterminada, Silverlight admite llamadas a servicios web en el mismo dominio o sitio de origen. El mismo dominio significa que las llamadas deben usar el mismo subdominio, protocolo y puerto. Esto es por razones de seguridad y evita la falsificación entre dominios.

Aquí es un ejemplo de archivo:

<?xml version="1.0" encoding="utf-8" ?> 
<access-policy> 
    <cross-domain-access> 
    <policy> 
     <allow-from http-request-headers="*"> 
     <domain uri="http://intranet.mydomain.net"/> 
     </allow-from> 
     <grant-to> 
     <resource path="/" include-subpaths="true"/> 
     </grant-to> 
    </policy> 
    </cross-domain-access> 
</access-policy> 

Esto permitiría solicitudes sólo de intranet.mydomain.net.

Editar

Se ha preguntado: ¿Cómo funcionaría si tengo dos servicios WCF? /ServiceA/a.svc y /ServiceB/b.svc y quiero que ServiceA to esté abierto a cualquier persona, en cualquier lugar, y ServiceB solo funcione desde mi intranet?

Su archivo de política se vería así:

<?xml version="1.0" encoding="utf-8" ?> 
<access-policy> 
    <cross-domain-access> 
    <policy> 
     <allow-from http-request-headers="*"> 
     <domain uri="http://*"/> 
     </allow-from> 
     <grant-to> 
     <resource path="/ServiceA/" include-subpaths="true"/> 
     </grant-to> 
    </policy> 

    <policy> 
     <allow-from http-request-headers="*"> 
     <domain uri="http://intranet.mydomain.net"/> 
     </allow-from> 
     <grant-to> 
     <resource path="/ServiceB/" include-subpaths="true"/> 
     </grant-to> 
    </policy> 
    </cross-domain-access> 
</access-policy> 
+0

¿Cómo funcionaría si tengo dos servicios WCF? '/ ServiceA/a.svc' y'/ServiceB/b.svc' y quiero que ServiceA to esté abierto a cualquiera, en cualquier lugar, y ServiceB solo funcione desde mi intranet? ¿Es eso posible desde el archivo crossdomain? – Nate

+1

He editado mi respuesta. – DaveB

+0

¿Funcionaría esto en Safari? Parece que Safari no admite cross-end xml-s de forma predeterminada. Por supuesto, podría no importar ... – Gyuri

5

Es posible que desee echa un vistazo al siguiente enlace sobre 'Cómo utilizar archivos Cruz Directiva de dominio Con Silverlight' por Tim Heuer.

http://silverlight.net/learn/videos/all/how-to-use-cross-domain-policy-files-with-silverlight/

Aquí es otra página del blog de Tim Heuer que se puede leer a través que tiene ejemplos, así:

http://timheuer.com/blog/archive/2008/04/06/silverlight-cross-domain-policy-file-snippet-intellisense.aspx

alt text

que habría que no escribe su propio servicio WCF que vive con su aplicación Silverlight y maneja la solicitud a su servicio WCF externo. De esta forma, no deja nada abierto y solo se permite la comunicación con su servicio controlado (aunque el servicio mencionado podría estar bajo su control).

Este método también es útil cuando el otro servicio está fuera de sus manos y podría cambiar con frecuencia. Puede controlar cómo se maneja esto a través de su propio servicio y nunca necesita actualizar su control Silverlight (suponiendo que los cambios no sean drásticos).

Cuestiones relacionadas