2009-06-26 14 views
7

Próbuję dodać moją aplikację Silverlight, która żyje na jednej subdomenie do strony internetowej w innej poddomenie. Z jakiegoś powodu to po prostu nie działa ... moja aplikacja Silverlight jest ładowany za takie strony na http://subA.domain.com/somepage.html:Jak uzyskać dostęp do pliku XAP programu Silverlight w domenie?

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

Jeśli przenieść SilverlightApp.xap do subA.domain.com, ładuje idealnie. Jakie kroki są potrzebne, aby uzyskać dostęp do pliku XAP w różnych domenach? Zbieram sieć, próbując to rozgryźć i wydaje się, że nigdzie się to nie udaje.

Dzięki!

Odpowiedz

2

Gdy program Silverlight żąda pliku w formacie .XAP, musi mieć następujący format: application/x-silverlight-app. Potrzebny jest także plik zasad cross-domain w drugiej domenie. gl

0

Można utworzyć prosty plik html obok pliku .xap zawierającego obiekt silverlight i uzyskać do niego dostęp z elementu iframe. W ten sposób na przykład naprawiono ten problem na http://silverlight.live.com/.

na ciebie stronę główną na subA.domain.com dodać iframe wykazujące stronę HTML na innej domenie:

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

i SilverlightApp.html na subBdomain.com mógłby wyglądać następująco:

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

Aby pomóc innym osobom, które mają ten sam problem i nie chcą używać ramek IFrames, należy zapoznać się z tym link, ponieważ rozwiązało to mój problem. Mimo że autor odwołuje się do Silverlight 2, rozwiązał mój problem w Silverlight 3. Jeśli łącze zostanie przerwane, potrzebne są dwie rzeczy:

- W aplikacji Silverlight edytuj AppManifest. xml, aby dodać następujące:

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

- Jeśli używasz HtmlPage w aplikacji Silverlight (takie jak podczas czytania QueryString przeszedł na stronę hosting), należy również dodać:

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

do obiektu silverlight na stronie hostingu.

Należy pamiętać, że powyższe aspekty mają znaczenie dla bezpieczeństwa i nie mogę nie myśleć, że właśnie dlatego firma Microsoft nie stara się rozpowszechniać tych informacji. Jednak w moim przypadku nie mam skryptowalnych elementów silverlight, a od kiedy napisałem aplikację silverlight, nie mam problemu ze stroną hostingową pozwalającą aplikacji Silverlight na dostęp do niej.

Podczas badania tego, zauważyłem, że ten problem i odpowiadające mu rozwiązania są mylone z osobnym problemem, problemem srebrnego światła dostęp do usługi wcf przez granice domeny. Ten problem wymaga pliku clientaccesspolicy.xml znajdującego się w katalogu głównym witryny obsługującej usługę wcf.

Dzięki temu pierwsza witryna uzyskuje dostęp do pliku xap w drugiej witrynie, która uzyskuje dostęp do usługi danych w trzeciej witrynie, co zapewnia maksymalną elastyczność i możliwość ponownego wykorzystania.

Powiązane problemy