我可以从Azure Blob或CDN托管Silverlight XAP文件吗?

我可以从Azure Blob或CDN托管Silverlight XAP文件吗?,silverlight,silverlight-5.0,cdn,azure-storage-blobs,Silverlight,Silverlight 5.0,Cdn,Azure Storage Blobs,由于客户遍布全球,我们在最初从不同位置检索XAP时遇到了一些严重的加载延迟。我们希望能够在云中托管已编译的XAP,根据最终用户的位置提供更近距离的下载 我们正在使用RIA服务,但由于数据连接、与内部服务的连接等原因,服务端点需要保留在本地服务器上 我们如何使用基于云的服务分发XAP,同时让它继续保持与当前相同的功能 编辑:由于我自己解决了这个问题并找到了答案,我将以前完成的步骤从我的问题转移到了答案中,以更好地促进良好的问答格式,并为从第0步开始解决问题的任何人提供。在反复思考之后,我找到了让它

由于客户遍布全球,我们在最初从不同位置检索XAP时遇到了一些严重的加载延迟。我们希望能够在云中托管已编译的XAP,根据最终用户的位置提供更近距离的下载

我们正在使用RIA服务,但由于数据连接、与内部服务的连接等原因,服务端点需要保留在本地服务器上

我们如何使用基于云的服务分发XAP,同时让它继续保持与当前相同的功能


编辑:由于我自己解决了这个问题并找到了答案,我将以前完成的步骤从我的问题转移到了答案中,以更好地促进良好的问答格式,并为从第0步开始解决问题的任何人提供。

在反复思考之后,我找到了让它几乎完全工作的解决方案

  • 使用绝对URI更新RIA服务端点,以引用回托管页面,而不是相对于XAP位置本身
  • 确保从XAP中的任何资源加载所有图像(等)内容,或者确保将其上载到Azure存储Blob任何相对路径都将尝试解析到XAP位置。
  • 生成XAP文件并上载到Azure存储Blob。您需要确保XAP具有
    应用程序/x-silverlight-app
    内容类型。我是用电脑完成的。您可以通过双击打开项目的属性来设置
    内容类型
    ,但更好的是,您可以单击设置工具“编辑内容类型”,并添加
    .xap
    应用程序/x-silverlight-app
    的规则,以便在上传时自动设置
  • 确保您有适当的跨域策略
  • 更新主机页面以提供新的
    源代码。此外,如果尚未设置,则需要添加
    enablehtmlaccess
    参数,因为对于跨域,此值默认为false

  • 对于第#1项,我使用如下代码完成:

    var u = HtmlPage.Document.DocumentUri;
    Site = u.AbsoluteUri.Substring(0, u.AbsoluteUri.LastIndexOf('/'));
    MyServiceUri = new Uri(Site + "/ClientBin/My-Namespace-MyService.svc", UriKind.Absolute);
    
    对于第4项,我的代码如下所示:

    <param name="source" value="<%= Request.Url.Scheme %>://mytest.blob.core.windows.net/my-container/MySilverlightApp.xap"/>
    <param name="enablehtmlaccess" value="true" />
    

    但是,虽然这将显示自定义启动屏幕,但如果启动屏幕上有任何进度报告,则它将不起作用。onsourcedownloadprogresschanged
    引用的javascript函数永远不会启动。我找不到为什么会这样,也找不到解决办法。你只需要有一个旋转的动画或类似的东西来代替实际的%进度指示器。

    没有跨域安全策略,你能做到这一点吗?@Steve我似乎做不到。我注释掉了普通表单的开头代码,将其替换为根的TextBlock。仍然有一个调用RIA服务来获取用户prefs,并且有一个调用抱怨没有权限,尽管我尽可能地包含了一个松散的跨域策略(现在再次运行localhost)。
    <script id="xamlSplash" type="text/xaml">
        <%= System.IO.File.ReadAllText(Context.Server.MapPath("~/Loading.xaml")) %>
    </script>
    <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
        <param name="splashscreensource" value="#xamlSplash" />