Как решить междоменную проблему с приложением Silverlight?
У меня есть приложение silverlight, которое пытается получить доступ к другому сайту (размещенному на JBOSS или Tomcat) следующим образом:
WebClient proxy;
//......
proxy.DownloadStringAsync(url); //this url point another site hosted by JBOSS or Tomcat with http. https not available for this site.
Доступ к Silverlight осуществляется через https. Когда я запускаю приложение silverlight и пытаюсь получить доступ к другому сайту, во всплывающем окне появляется сообщение, как показано ниже:
Показать смешанный контент?
затем либо выберите Да / Нет, браузер не работает.
Если я использую http для доступа к своему приложению Silverlight, все в порядке.
Тогда эта проблема считается междоменной проблемой. Междоменный XML-файл может быть размещен на сайте JBOSS или Tomcat. Не уверен, как выглядит файл политики. Любой пример XML-файла политики для этого случая? Тогда я могу поставить его на сайт JBoss или Tomcat и протестировать?
Комментарии: Обнаружил и постараюсь.
1 ответ
Во-первых, вам нужен только файл clientaccesspolicy.xml для Silverlight (и он имеет больше возможностей). crossdomain.xml - более старая модель безопасного доступа с совместимостью с Flash и т. д.
Во-вторых, файл должен находиться в корне сайта https, поскольку он не совпадает с сайтом http. Вам нужно войти на оба сайта, если ваше приложение получило доступ к сайтам http и https.
В-третьих, если у вас все еще есть проблемы, добавьте https явно в конфигурацию. например, с
<allow-from>
<domain uri="http://*">
<domain uri="https://*">
</allow-from>)
На этой странице об ограничениях доступа к сетевой безопасности в Silverlight более подробно описаны параметры
Пример файла:
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<!--Enables Silverlight 3+ all methods -->
<policy>
<allow-from http-methods="*">
<domain uri="http://*">
<domain uri="https://*">
</allow-from>
<grant-to>
<resource path="/api" include-subpaths="true"/>
</grant-to>
</policy>
<!--Enables Silverlight 2 clients to continue to work normally -->
<policy>
<allow-from >
<domain uri="http://*">
<domain uri="https://*">
</allow-from>
<grant-to>
<resource path="/api" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>