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

Silverlight 5.1 app breaks when moved to new server

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

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

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

当我使用安装了 Silverlight 插件的 IE 11 导航到应用程序时,我得到一个弹出窗口,"Load operation failed for query 'GetUser'. [HttpWebRequest_WebException_remoteServer] Arguments: NotFound..." 等

在 Windows 事件查看器中看不到任何记录。

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

查看源代码我看到有一个名为 "AuthenticationService" 的 class,它派生自 System.ServiceModel.DomainServices.Server.ApplicationServices.AuthenticationBase,后者又具有 GetUser 方法。我还可以在 "ClientBin" 文件夹中看到文件 PMSys.Client.xap。我假设 PMSys.Client.xap 中的一些 Silverlight 魔法创建了路径 http://xxx.xxx.xxx.xxx/ClientBin/PMSys-Client-Web-AuthenticationService.svc/binary/GetUser.

使用相同的 IE 11 和 Fiddler 实例,但调用旧的、成功的机器,我注意到它首先获得 Silverlight.js,然后对 ...binary/GetUser 进行相同的调用.在出现故障的新机器上,没有调用 get Silverlight.js。我认为这是一个线索。

我可以在 Visual Studio 2017 年的本地计算机上以调试模式 运行 此应用程序。 App.xaml.cs 文件包含一个方法 "Application_Startup"。此方法调用 WebContext.Current.Authentication.LoadUser(),后者又调用这段代码:

public EntityQuery<User> GetUserQuery()
    {
        this.ValidateMethod("GetUserQuery", null);
        return base.CreateQuery<User>("GetUser", null, false, false);
    }

这适用于我的本地机器。我假设这是我访问 2016 服务器上的应用程序时失败的 "GetUser" 调用;我对Silverlight的理解是,这个"GetUser"调用是Silverlight在浏览器中运行时间调用到服务器的

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

这似乎是服务器端的问题。如果我将路径 http://xxx.xxx.xxx.xxx/ClientBin/PMSys-Client-Web-AuthenticationService.svc/binary/GetUser 粘贴到浏览器地址栏中,当我访问新的失败站点时,我会收到 404 错误。出于某种原因,IIS 根本不提供 Silverlight 的东西。但是,如果我将相同的路径传递给我的旧的、工作的应用程序,我会得到通常的浏览器提示,"what do you want to use to open this file," 并且调用的结果流向我。

在新的(失败的)和旧的(工作的)站点上,如果我将引用者的路径 http://xxx.xxx.xxx.xxx/ClientBin/PMSys.Client.xap 粘贴到浏览器地址栏中,我会得到通常的提示 "what do you want to use to open this file."

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

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

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

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