Как решить междоменную проблему с приложением 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>
Другие вопросы по тегам