我有一个应用程序,我在 Internet Explorer 中托管一个 .NET 3.5 Windows 窗体控件以提供对打印机的访问。该控件在 IE7 到 IE10(桌面)中运行良好,但在 Windows 8.1 上的 IE11 中无法正常运行(同样在桌面模式下)。
有问题的 PC 安装并启用了 .NET 2.0/3.0/3.5 和 .NET 4.0/4.5,该站点已添加到受信任区域,CASPOL 权限已设置为与运行 IE7 到 10 的 PC 相同并且 EnableIEHosting 在 PC 上的 32 位和 64 位级别都设置为 1。
我也试过 DebugIEHost。从中指示表单控件实际上正在创建的日志。本地调试表明问题在于调用控件的方法(来自 JavaScript),该方法似乎永远不会返回,也似乎永远不会实际运行。我只剩下一个锁定的 IE11,必须从任务管理器中关闭。
如前所述,从 Windows XP 到 Windows 8.0 上的 IE7 到 IE10 都可以正常工作,我绝对确定 CASPOL 配置等已正确设置。
在 IE11 中托管 .NET Windows 窗体控件时,是否有人知道任何其他问题或新的配置要求?
更新#1
我现在已经能够进一步解决这个问题。我已经诊断它实际上是无法返回的 WCF 服务客户端的构造函数。它是一个简单生成的客户端类,因此只需使用端点配置名称调用基本构造函数;不幸的是,它在对基类的调用中失败了ClientBase<T>.ClientBase(string endpointConfigurationName)
。
鉴于这些新信息,我尝试禁用 Windows 防火墙,以防它以某种方式阻止创建服务客户端(尽管实际上我不希望防火墙干预任何事情,直到由客户)。没有不同。
我也尝试过调用默认(无参数)构造函数;再次没有区别。
我唯一的另一个想法是服务客户端的配置。如果有什么对任何人来说很突出的话,如下所示......
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IMyService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" useDefaultWebProxy="true" allowCookies="false" />
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost/MyWeb/Services/MyService.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IMyService" contract="wcfWS.IMyService" name="WSHttpBinding_IMyService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</client>
</system.serviceModel>
此配置由 VS2012 的 WCF 服务参考生成。
仅供参考,该控件调用 WCF 服务来检索有关其引用/id 已通过 JavaScript 调用传入的对象的更详细信息;即我传入 ID=1,然后控件调用 ID=1 的 WCF 服务以检索详细信息,然后将这些详细信息发送到打印机。挂起的是对该 WCF 服务的客户端构造函数的调用。