У меня есть приложение silverlight (размещенное на intranet.mydomain.net) и служба WCF на (webservices.mydomain.net)
Нужен ли мне файл межсайтовой политики? Если да, то как будет выглядеть разрешение доступа только с intranet.mydomain.net?
У меня есть приложение silverlight (размещенное на intranet.mydomain.net) и служба WCF на (webservices.mydomain.net)
Нужен ли мне файл межсайтовой политики? Если да, то как будет выглядеть разрешение доступа только с intranet.mydomain.net?
Да, вам понадобится файл clientaccesspolicy.xml в ROOT домена вашей службы (webservices.mydomain.net).
По умолчанию Silverlight поддерживает вызовы веб-служб в том же домене или исходном сайте. Один и тот же домен означает, что вызовы должны использовать один и тот же поддомен, протокол и порт. Это сделано из соображений безопасности и предотвращает междоменную подделку.
Вот пример файла:
<?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>
Это разрешит запросы только от intranet.mydomain.net.
Изменить
Был задан вопрос: как это будет работать, если у меня есть две службы WCF? /ServiceA/a.svc и /ServiceB/b.svc, и я хочу, чтобы ServiceA была открыта для всех и в любом месте, а ServiceB работала только из моей интрасети?
Ваш файл политики будет выглядеть так:
<?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>
/ServiceA/a.svc
и /ServiceB/b.svc
и я хочу, чтобы ServiceA была открыта для всех и в любом месте, а ServiceB работала только из моей интрасети? Возможно ли это из кроссдоменного файла?
- person Nate; 07.12.2009
Возможно, вы захотите проверить следующую ссылку о 'Как использовать файлы междоменной политики с Silverlight', автор: Тим Хойер.
http://silverlight.net/learn/videos/all/how-to-use-cross-domain-policy-files-with-silverlight/
Вот еще одна страница из блога Тима Хойера, которую вы можете прочитать, также есть примеры:
Я бы подумал о написании вашей собственной службы WCF, которая живет с вашим приложением silverlight и обрабатывает запросы к вашей внешней службе WCF. Таким образом, вы ничего не оставляете открытым, и разрешается только связь с вашей контролируемой службой (хотя служба, которую вы упомянули, может находиться под вашим контролем).
Этот метод также полезен, когда другая служба находится вне ваших рук и может часто меняться. Вы можете контролировать, как это обрабатывается, через свой собственный сервис, и вам никогда не придется обновлять элемент управления silverlight (при условии, что изменения не являются радикальными).