1

我有一个应用程序,我在 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 服务的客户端构造函数的调用。

4

1 回答 1

1

我取得了突破。

由于我们无法在托管 Windows 窗体控件的 Web 应用程序中部署服务配置。我在代码本身中创建了构造函数,它工作得非常好。

以下是代码示例。

    Dim binding As New BasicHttpBinding
    Dim endPoint As New EndpointAddress("http://SERVERNAME/<WEBSITE>/YOURSERVICE.svc")
    Dim obj As New TestWCFService.TestWCFServiceClient(binding, endPoint)

希望这对你也有效。

于 2013-12-09T10:29:32.680 回答