4

我正在将一个在 .NET 3.5+ 中工作的 .NET 应用程序移植到 WinRT,它包括一个 WCF 服务客户端(使用ChannelFactory<T>编程方式创建),它几乎与原始版本共享其所有代码(即尽可能多地相同)该程序。该服务通过端口 9443 上的 SSL 访问,并使用 Windows 身份验证。代码的原始版本完美运行,但 WinRT 端口通常会因三层异常而失败:我得到一个EndpointNotFoundException(“在 https://... 处没有端点监听”),内部异常为WebException( “无法连接到远程服务器”),内部异常为SocketException(“试图以访问权限 192.168.xx:9443 禁止的方式访问套接字”)。

奇怪的是,除非我让 Fiddler 作为代理并捕获流量,否则这将始终失败。

现在,更多细节。

  • SSL 证书是有效的,来自受信任的机构,并且涵盖了附加到我的 IIS 站点的主机头名称(并且仅包含该名称)。
  • 我可以浏览到 .svc 文件及其 ?wsdl 而不会出现任何错误,并且 wsdl 本身会报告我在应用程序中使用的确切 URL。
  • 有问题的站点在 9443 上绑定了 https,在 9999 上绑定了 http(两者都有与之关联的主机头名称)
  • 我在站点根目录中有以下 clientaccesspolicy.xml,并且可以通过 http 和 https 通过适当的端口访问它:

    <?xml version="1.0" encoding="utf-8"?>
    <access-policy>
      <cross-domain-access>
        <policy>
          <allow-from http-request-headers="*">
            <domain uri="*" />
          </allow-from>
          <grant-to>
            <resource path="/" include-subpaths="true"/>
          </grant-to>
        </policy>
      </cross-domain-access>
    </access-policy>
    
  • 运行该服务的服务帐户有一个与之关联的 UPN,因为有人建议这可能会有所帮助。我尝试将其放入<servicePrincipalName/>我的端点中<identity />,但无济于事;使用<dns />那里也没有帮助。

  • 绑定是BasicHttpBindingwith BasicHttpSecurityMode.Transport,我正在设置ClientCredentialType = HttpClientCredentialType.Windows。凭据当前是硬编码的并且是正确的。但我认为这些都不是问题,因为...
  • 我可以在循环中设置服务调用并观察它失败,失败,失败,失败,直到我 Alt+Tab 切换到 Fiddler 并开始捕获流量。据我了解,这会通过 Fiddler 的本地代理重定向服务调用,并且无论出于何种原因,它都能完美地工作——我什至不需要重新启动程序,更不用说重新编译它了。
  • 无论我是否将 Fiddler 的中间人证书安装为受信任,无论我是否选择解码 SSL 会话,这都是一样的。
  • 当我使用 Fiddler 执行此操作时,我看到的流量对我来说并不是特别有启发性。看起来像标准的协商握手,带有 HTTP 401 错误,然后是成功的连接。
  • IIS 是第 7 版。日志(在 inetpub\logs 中)似乎没有显示任何有趣的东西——事实上,除非连接了 Fiddler,否则我似乎从来没有看到任何东西,当一切正常时。
  • 我尝试使用 Wireshark 来嗅出这一点,但结果对我来说基本上没用。在我开始在 Fiddler 中捕获之前,Wireshark 甚至看起来都没有拾取任何东西,然后我得到了流量,但我不知道我是否只是看错了。
  • 尝试使用添加服务引用添加标准 Visual Studio 代理会导致与我的自定义代码完全相同的行为。
  • 只是为了好玩,为了看看 WinRT 是否像 Silverlight 那样对端口有未发布的限制,我将站点设置在端口 4505 上(在 4502-4534 范围内)。没有改变。
  • 清除 Internet 选项中的缓存和 cookie 似乎无关紧要。
  • Windows 防火墙已关闭。Windows 8 是否有任何其他可能的交通障碍?(没关系,因为桌面应用程序一直运行良好。)
  • Windows Defender 实时保护已关闭。
  • 即使我在模拟器上运行应用程序,行为也是一样的。我无法在另一台物理机器上进行测试,因为这是我唯一的 Windows 8 开发安装。

希望这表明我已经对此进行了尽职调查。我错过了什么?如果我能提供更多信息,请告诉我。

4

1 回答 1

6

您是否在其清单中为您的应用程序设置了 Intranet/Internet 网络访问?

于 2012-09-20T06:08:19.570 回答