Как мне получить доступ к файлу Silverlight XAP через домен?

StackOverflow https://stackoverflow.com/questions/1051447

  •  20-08-2019
  •  | 
  •  

Вопрос

Я пытаюсь добавить свое приложение Silverlight, которое находится на одном поддомене, на веб-страницу в другом поддомене.По какой - то причине это просто не работает ...мое приложение Silverlight загружается как таковое на странице http://subA.domain.com/somepage.html:

<div id="silverlightControlHost">
    <object data="data:application/x-silverlight-2," type="application/x-silverlight-2"
        width="800px" height="600px">
        <param name="source" value="http://subB.domain.com/SilverlightApp.xap" />
        <param name="onerror" value="onSilverlightError" />
        <param name="background" value="white" />
        <param name="minRuntimeVersion" value="2.0.31005.0" />
        <param name="autoUpgrade" value="true" />
        <param name="enableHtmlAccess" value="true" />
        <a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">
            <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight"
                style="border-style: none" />
        </a>
    </object>
    <iframe style='visibility: hidden; height: 0; width: 0; border: 0px'></iframe>
</div>

Если я перемещу SilverlightApp.xap в subA.domain.com, он загрузится идеально.Какие шаги необходимы для доступа к файлу XAP из разных доменов??Я рылся в сети, пытаясь разобраться в этом, и, похоже, ни к чему не пришел.

Спасибо!!

Это было полезно?

Решение

Когда Silverlight запрашивает междоменный файл .XAP, тип содержимого должен быть: приложение/x-silverlight-приложение.Кроме того, вам нужен файл междоменной политики на другом домене.gl

Другие советы

Чтобы помочь другим, у кого есть такая же проблема, и которые не хотят использовать IFrames, пожалуйста, ознакомьтесь с этим Ссылка, поскольку это решило мою проблему.Несмотря на то, что автор ссылается на Silverlight 2, он решил мою проблему в Silverlight 3.На случай, если ссылка оборвется, есть 2 вещи, которые мне нужно было сделать:

-- В приложении Silverlight отредактируйте AppManifest.xml, чтобы добавить следующее:

<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
ExternalCallersFromCrossDomain="ScriptableOnly">

-- Если вы используете HtmlPage в своем приложении Silverlight (например, при чтении строки запроса, переданной на страницу хостинга), вы также должны добавить:

<param name="enableHtmlAccess" value="true" />

к объекту silverlight на странице хостинга.

Пожалуйста, обратите внимание, что вышесказанное имеет последствия для безопасности, и я не могу не думать, что именно поэтому Microsoft не прилагает всех усилий для распространения этой информации.Однако в моем случае у меня нет скриптовых элементов silverlight, и поскольку я написал приложение silverlight, у меня нет проблем со страницей хостинга, разрешающей приложению silverlight доступ к ней.

Исследуя это, я заметил, что эта проблема и соответствующие решения путаются с отдельной проблемой, проблемой доступа silverlight xap к службе wcf через границы домена.Для решения этой проблемы требуется файл clientaccesspolicy.xml, расположенный в корневом каталоге веб-сайта, на котором размещена служба wcf.

Таким образом, возможно, чтобы 1-й сайт получал доступ к файлу xap на 2-м сайте, который получает доступ к службе передачи данных на 3-м сайте, для максимальной гибкости и повторного использования.

Вы могли бы создать простой html-файл рядом с .xap, содержащий объект silverlight, и получить к нему доступ из iframe.Вот как http://silverlight.live.com/ исправлена эта проблема, например.

На вашей главной странице на subA.domain.com добавьте iframe, который показывает html-страницу в другом домене:

<iframe src="http://subB.domain.com/SilverlightApp.html" 
        scrolling="no" 
        frameborder="0" 
        style="width:800px;height:600px">
</iframe>

и SilverlightApp.html на subBdomain.com могло бы выглядеть примерно так:

<html>
  <body>
    <div id="silverlightControlHost">    
      <object data="data:application/x-silverlight-2," 
              type="application/x-silverlight-2"        
              width="800px" height="600px">        
        <param name="source" value="http://subB.domain.com/SilverlightApp.xap" />
        <param name="onerror" value="onSilverlightError" />
        <param name="background" value="white" />
        <param name="minRuntimeVersion" value="2.0.31005.0" />
        <param name="autoUpgrade" value="true" />
        <param name="enableHtmlAccess" value="true" />
        <a href="http://go.microsoft.com/fwlink/?LinkID=124807" 
           style="text-decoration: none;">            
          <img src="http://go.microsoft.com/fwlink/?LinkId=108181" 
               alt="Get Microsoft Silverlight"
               style="border-style: none" />
        </a>
      </object>
      <iframe style='visibility: hidden; height: 0; width: 0; border: 0px'>
      </iframe>
    </div>
  </body>
</html>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top