2009-09-01 12 views
5

Mam app silverlight (hostowane na intranet.mydomain.net) oraz usługę WCF w (webservices.mydomain.net)Silverlight WCF usługi Krzyż Domain Pytanie

Czy muszę plik zasad cross-site? Jeśli tak, jak by to było, aby zezwolić na dostęp tylko z witryny intranet.mydomain.net?

Odpowiedz

4

Tak, potrzebny będzie plik clientaccesspolicy.xml w katalogu głównym domeny usługi (webservices.mydomain.net).

Domyślnie Silverlight obsługuje połączenia z usługami internetowymi w tej samej domenie lub miejscu pochodzenia. Ta sama domena oznacza, że ​​połączenia muszą korzystać z tej samej poddomeny, protokołu i portu. Jest to ze względów bezpieczeństwa i zapobiega fałszowaniu w wielu domenach.

Oto przykładowy plik:

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

Pozwoliłoby wnioski tylko od intranet.mydomain.net.

Edit

Został on zapytał: Jak to będzie działać, jeśli mam dwie usługi WCF? /ServiceA/a.svc i /ServiceB/b.svc i chcę, aby ServiceA był otwarty dla każdego, wszędzie i ServiceB, aby działał tylko z mojego intranetu?

Plik polityka będzie wyglądać następująco:

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

Jak to będzie działać, jeśli mam dwie usługi WCF? '/ ServiceA/a.svc' i'/ServiceB/b.svc' i chcę, aby ServiceA był otwarty dla każdego, wszędzie i ServiceB, aby działał tylko z mojego intranetu? Czy to możliwe z pliku crossdomain? – Nate

+1

Edytowałem swoją odpowiedź. – DaveB

+0

Czy to działa w Safari? Wygląda na to, że Safari nie obsługuje domyślnie xml-ów. Oczywiście, nie ma to znaczenia ... – Gyuri

5

Możesz też sprawdzić na poniższy link o „Jak korzystać z plików z zasad domeny z Silverlight” przez Tim Heuer.

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

Oto kolejna strona z blogu Tim Heuer, że można przeczytać, że ma przykładów, a także:

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

alt text

uważam pisania własnych usług WCF który żyje z aplikacją silverlight i obsługuje żądanie do zewnętrznej usługi WCF. W ten sposób nie pozostawisz nic otwartego i dozwolona jest tylko komunikacja z kontrolowaną usługą (chociaż usługa, o której wspomniałeś, może być pod Twoją kontrolą).

Ta metoda jest również przydatna, gdy inna usługa nie jest w Twoich rękach i może się często zmieniać. Możesz kontrolować, w jaki sposób jest to obsługiwane za pośrednictwem własnej usługi i nigdy nie musisz aktualizować kontroli silverlight (zakładając, że zmiany nie są drastyczne).

Powiązane problemy