来自WinRT的WCF客户端命中SocketError.AccessDenied(但与Fiddler捕获流量一起工作)

Dom*_*c P 4 .net wcf iis-7 windows-8 windows-runtime

我正在将一个运行.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>
    
    Run Code Online (Sandbox Code Playgroud)
  • 运行该服务的服务帐户具有与之关联的UPN,因为有人建议可能有所帮助.我尝试将其放入<servicePrincipalName/>我的端点<identity />,但无济于事; 使用<dns />那里也没有帮助.

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

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

Dom*_*nik 6

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

  • 呃,是的,我确实需要别的东西!我没有意识到要对局域网上的服务器执行此操作需要'专用网络(客户端和服务器)'.我还勾选了"企业身份验证"以获得良好的衡量标准,现在它可行.手,满足额头.谢谢!! (2认同)