wcf - 浏览器连接到 WCF 服务,但不连接到我的 WCF 客户端。可能是什么原因?

标签 wcf wcf-client

在生产服务器 (Windows Server 2003 SP2) 上,我可以使用 Internet Explorer 8 连接到远程 WCF 服务:当我浏览到 URL http://www.domain.com/Service.svc 时(我的服务监听的地方)我得到了显示的服务的预期信息页面。 Internet Explorer 中的连接设置仅指定“自动检测”,代理设置被禁用。

如果我在同一台服务器上启动一个控制台应用程序(在 .NET 4.0 中使用 WCF 构建),该应用程序也尝试连接到同一个 WCF 服务,它会失败告诉我没有端点可用于监听 http://www.domain.com/Service.svc .

WCF客户端的配置:

<configuration>
  <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" transactionFlow="false"
            hostNameComparisonMode="StrongWildcard"
            maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
            messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
            allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" 
              maxArrayLength="16384"
              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
              enabled="false" />
          <security mode="None">
            <transport clientCredentialType="Windows" proxyCredentialType="None"
                realm="" />
            <message clientCredentialType="Windows" negotiateServiceCredential="true"/>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://www.domain.com/Service.svc"
          binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IMyService"
          contract="Service.IMyService" name="WSHttpBinding_IMyService" />
    </client>
  </system.serviceModel>
<configuration>

通过这些设置,我可以从我的开发计算机与远程服务成功通信。

查看其他选项后,我发现可以指定使用 Internet Explorer 代理设置:

<system.net>
  <defaultProxy>
    <proxy usesystemdefault="true" />
  </defaultProxy>
</system.net>

它不起作用,我不确定我是否真的正确理解了这个设置。 (我希望 WCF 客户端能够采用 Internet Explorer 的“自动检测”设置,然后像安装的 IE 一样以相同的方式连接到服务。)

我还在绑定(bind)配置中的 useDefaultWebProxy 设置之间切换了 true 和 false,但没有成功。

现在我正在寻求帮助,我能做什么?哪些设置可能错误或丢失?我可以测试什么以及如何获得更详细的错误消息以更好地识别问题?

提前谢谢您!

编辑:

Innerexception 中的堆栈表示:

  • System.Net.WebException:无法建立与远程服务器的连接
  • System.Net.Sockets.SocketException:由于主机在一定时间范围内没有应答而导致连接失败,或者由于连接的主机没有应答而导致连接故障。

最佳答案

虽然 Internet Explorer 可以在不指定代理地址的情况下连接到服务,但仅启用“自动检测”功能,但在设置 <proxy usesystemdefault="true" /> 时,这似乎不适用于我的 WCF 客户端。 。 (文档说:这将拾取 Internet Explorer 设置。但它不起作用。)最后,客户给了我一个具体的代理地址,我按以下方式更改了客户端配置中的绑定(bind):

  • 已更改:useDefaultWebProxy="false" (而不是true)
  • 已添加:proxyAddress="http://10.20.30.40:8080" (编辑2:不仅仅是IP地址!带有http://的前缀很重要!否则会抛出新的异常,请参阅下面的后续问题。)

这样,WebException 和 SocketConnection 消失了,客户端似乎连接到了服务,但在调用第一个服务操作时,我现在遇到了下一个问题。我会将其放在一个新问题中。

编辑:这是后续问题:

Strange exception when connecting to a WCF service via a proxy server

Edit2:根据后续问题的答案,添加前缀 proxyAddress 很重要与 http 。 (现在改变我的答案)

关于wcf - 浏览器连接到 WCF 服务,但不连接到我的 WCF 客户端。可能是什么原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3041652/

相关文章:

.net - WCF 中 NetPeerTcpBinding 的替代方案

wcf - WCF 服务契约(Contract)上的数据注释

error-handling - WCF net.tcp 服务器断开连接 - 如何在客户端正确处理?

c# - WCF - 客户端端点配置错误

c# - 为什么我的对象不需要 ServiceKnownType?

使用 basicHttpBinding 的 WCF 服务仍在发送内容类型 "text/xml"

c# - 我希望能够使用 lambda 表达式来指定要通过 wcf 服务返回的值范围

c# - 从客户端的不同文件加载 WCF 配置

c# - WCF 客户端错误处理

javascript - 结果类名称未出现在 SOAP 结果中