2009-06-26 24 views
7

Estoy tratando de agregar mi aplicación Silverlight que vive en un subdominio a una página web en otro subdominio. Por alguna razón esto ... mi aplicación Silverlight simplemente no está funcionando se carga como tal en una página en http://subA.domain.com/somepage.html:¿Cómo accedo a un archivo Silverlight XAP en un dominio?

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

Si muevo SilverlightApp.xap a subA.domain.com, se carga a la perfección. ¿Qué pasos son necesarios para acceder a un archivo XAP en todos los dominios? He estado hurgando en la red tratando de resolver esto y parece que no estoy llegando a ninguna parte.

Gracias!

Respuesta

2

Cuando Silverlight solicita un archivo .XAP de dominio cruzado, el tipo de contenido debe ser: application/x-silverlight-app. Además, necesita un archivo de política entre dominios en el otro dominio. gl

0

Puede crear un archivo html simple junto al .xap que contiene el objeto silverlight y acceder a este desde un iframe. Así es como http://silverlight.live.com/ solucionó este problema, por ejemplo.

en que la página principal de subA.domain.com añadir un iframe que muestra una página HTML en el otro dominio:

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

y SilverlightApp.html en subBdomain.com podría ser algo como:

<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

Para ayudar a otras personas que tienen este mismo problema, y ​​no desea utilizar IFrames, consulte este link, ya que ha resuelto mi problema. Aunque el autor se refiere a Silverlight 2, resolvió mi problema en Silverlight 3. En caso de que el enlace se caiga, hay dos cosas que necesito hacer:

- En la aplicación Silverlight, edite el AppManifest. xml para agregar la siguiente:

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

- Si está utilizando htmlpage en su aplicación Silverlight (como cuando se lee la cadena de consulta pasa a la página de alojamiento), también debe agregar:

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

al objeto Silverlight en la página de alojamiento.

Tenga en cuenta que existen implicaciones de seguridad para lo anterior, y no puedo evitar pensar que es por eso que Microsoft no se desvive por difundir esta información. Sin embargo, en mi caso, no tengo elementos Silverlight con script, y desde que escribí la aplicación Silverlight, no tengo ningún problema con la página de alojamiento, lo que permite que la aplicación Silverlight acceda a ella.

Al investigar esto, noté que este problema y las soluciones correspondientes se confunden con un problema aparte, el problema de un xap de silverlight que accede a un servicio wcf a través de los límites del dominio. Ese problema requiere un archivo clientaccesspolicy.xml ubicado en la raíz del sitio web que aloja el servicio wcf.

Por lo tanto, es posible tener el primer sitio accediendo a un archivo xap en un segundo sitio, que accede a un servicio de datos en un tercer sitio, para una máxima flexibilidad y reutilización.

Cuestiones relacionadas