2009-09-01 24 views
5

Ho un'applicazione Silverlight (ospitato presso intranet.mydomain.net) e un servizio WCF in (webservices.mydomain.net)Silverlight WCF Service Cross Domain Domanda

Ho bisogno di un file di criteri sito? In tal caso, come apparirebbe consentire l'accesso solo da intranet.mydomain.net?

risposta

4

Sì, è necessario un file clientaccesspolicy.xml nel ROOT del dominio del servizio (webservices.mydomain.net).

Per impostazione predefinita, Silverlight supporta le chiamate ai servizi Web sullo stesso dominio o sito di origine. Lo stesso dominio indica che le chiamate devono utilizzare lo stesso dominio secondario, protocollo e porta. Questo è per motivi di sicurezza e previene le contraffazioni tra domini.

Ecco un esempio di file:

<?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> 

Ciò consentirebbe richieste solo da intranet.mydomain.net.

Modifica

E 'stato chiesto: Come questo lavoro se ho due servizi WCF? /ServiceA/a.svc e /ServiceB/b.svc e voglio che ServiceA sia aperto a chiunque, ovunque e ServiceB per funzionare solo dalla mia intranet?

Il file politica sarebbe simile a questa:

<?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

Come questo lavoro se ho due servizi WCF? '/ ServiceA/a.svc' e'/ServiceB/b.svc' e voglio che ServiceA sia aperto a chiunque, ovunque, e ServiceB funzioni solo dalla mia intranet? È possibile dal file crossdomain? – Nate

+1

Ho modificato la mia risposta. – DaveB

+0

Funzionerebbe su Safari? Sembra che Safari non supporti il ​​cross-domain xml-s per impostazione predefinita. Certo, potrebbe non essere importante ... – Gyuri

5

Si potrebbe voler controllare il seguente link di 'Come usare Croce file Domain Policy Con Silverlight' da Tim Heuer.

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

Ecco un'altra pagina dal blog di Tim Heuer che si può leggere che ha esempi così:

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

alt text

vorrei non crei il proprio servizio WCF che vive con la tua app silverlight e gestisce la richiesta al tuo servizio WCF esterno. In questo modo non lasci nulla e solo la comunicazione al tuo servizio controllato è consentita (anche se il servizio che hai citato potrebbe essere sotto il tuo controllo).

Questo metodo è utile anche quando l'altro servizio è fuori mano e potrebbe cambiare spesso. È possibile controllare come viene gestito tramite il proprio servizio e non è necessario aggiornare il controllo Silverlight (presupponendo che le modifiche non siano drastiche).

Problemi correlati