Asp.net Silverlight 5.1应用程序在移动到新服务器时中断

Asp.net Silverlight 5.1应用程序在移动到新服务器时中断,asp.net,silverlight,silverlight-5.0,Asp.net,Silverlight,Silverlight 5.0,我继承了一个Silverlight 5.1 asp.net应用程序,该应用程序已在运行IIS 7的Windows 2008 R2服务器上成功运行多年。我的任务是将此应用程序移动到带有IIS 10的Windows Server 2016标准机器上 我在Windows 2016计算机上安装了Silverlight 5.1(客户端)和Silverlight 5.0 sdk,但没有做任何更改。机器具有框架4.7.2。其他几个asp.net应用程序托管在此服务器上,但这是第一个Silverlight应用程

我继承了一个Silverlight 5.1 asp.net应用程序,该应用程序已在运行IIS 7的Windows 2008 R2服务器上成功运行多年。我的任务是将此应用程序移动到带有IIS 10的Windows Server 2016标准机器上

我在Windows 2016计算机上安装了Silverlight 5.1(客户端)和Silverlight 5.0 sdk,但没有做任何更改。机器具有框架4.7.2。其他几个asp.net应用程序托管在此服务器上,但这是第一个Silverlight应用程序

我试着简单地将旧的应用程序复制到新的服务器上,并将应用程序从源代码重新构建并发布到新的服务器上。我已经尝试在http和https下运行。在所有情况下,我都会得到如下所述的错误

当我在安装Silverlight插件的情况下使用IE 11导航到应用程序时,我会看到一个弹出窗口,“查询“GetUser”的加载操作失败。[HttpWebRequest\u WebException\u remoteServer]参数:NotFound…”等等

未记录在Windows事件查看器中可以看到的任何内容

使用Fiddler,我可以看到浏览器首先进行此调用,并收到404 Not Found错误:

  • 获取HTTP/1.1
  • 推荐人:
查看源代码,我看到有一个名为“AuthenticationService”的类,它派生自System.ServiceModel.DomainServices.Server.ApplicationServices.AuthenticationBase,后者又有一个GetUser方法。我还可以在“ClientBin”文件夹中看到文件PMSys.Client.xap。我假设PMSys.Client.xap中的一些Silverlight魔法创建了路径

使用相同的IE 11和Fiddler实例,但调用旧的、成功的机器,我注意到它首先得到Silverlight.js,然后对…binary/GetUser进行相同的调用。在新的失败机器上,没有调用获取Silverlight.js。我想这是个线索

我可以在本地计算机上的Visual Studio 2017中以调试模式运行此应用程序。App.xaml.cs文件包含一个方法“Application\u Startup”。此方法调用WebContext.Current.Authentication.LoadUser(),后者反过来调用以下代码:

public EntityQuery<User> GetUserQuery()
    {
        this.ValidateMethod("GetUserQuery", null);
        return base.CreateQuery<User>("GetUser", null, false, false);
    }
公共实体查询GetUserQuery() { ValidateMethod(“GetUserQuery”,null); 返回base.CreateQuery(“GetUser”,null,false,false); } 这在我的本地机器上工作。我假设这是在我访问2016服务器上的应用程序时失败的“GetUser”调用;我对Silverlight的理解是,这个“GetUser”调用是由浏览器中的Silverlight运行时向服务器发出的

我的问题是,我的设置中缺少什么导致404错误?为什么旧的成功应用程序加载Silverlight.js,而新的失败应用程序却不加载

这似乎是服务器端的问题。如果我将路径粘贴到浏览器地址栏中,当我访问新的失败站点时,会出现404错误。出于某种原因,IIS根本不提供Silverlight的东西。但是,如果我将相同的路径传递给我的旧的工作应用程序,我会得到通常的浏览器提示,“您想使用什么来打开此文件”,并且调用的结果会流到我的面前

在新的(失败的)和旧的(工作的)站点上,如果我将referer的路径粘贴到浏览器地址栏中,我会得到通常的提示:“您想用什么打开此文件?”

我检查了每个IIS设置,将旧站点与新站点进行比较,它们是一致的,包括“完全信任”以及存在.xap、.xbap和.xaml mime类型

除了Silverlight 5.1和5.0 SDK之外,我的服务器上还需要安装其他东西吗


我看过几篇关于安装RIA服务的帖子,但这似乎是Silverlight4的问题。旧的Windows 2008计算机上未安装RIA服务,应用程序正在那里成功运行。根据我的直觉,RIA服务需要安装在开发机器上,以引用“System.ServiceModel.DomainServices”库,但这些库已成为Silverlight 5部署的一部分,因此无需在web服务器上安装RIA服务。我已确认这些库已在部署中。

答案是在添加角色和功能向导下为WCF服务启用HTTP激活,请参见

听起来像是跨域问题。Silverlight的本质是浏览器对浏览器,每个被调用的站点/服务都应该通过设置一个配置文件来允许。@ΩmegaMan“跨域问题”是什么意思。我有什么错?有什么地方我需要看看吗…啊哈,让人想起往事。:-)@谢谢你,但我恐怕那个链接指的是Silverlight 4。无论如何,这个应用程序已经运行多年了,我没有进行任何跨域调用。Silverlight 4/5有跨域问题。但是silverlight应用程序是在客户端浏览器中运行的。要获取数据,它必须调用外部服务的服务(不在网页右侧)。这本质上是一种跨域调用。如果你说这不是问题,我相信你的话。我的想法是,一旦您更改了服务器,跨域的已批准站点的位置将随着新的服务位置而更改。如果没有其他内容,请查看本文中提到的配置文件,并验证是否允许跨域调用。