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

时间:2010-06-14 23:32:35

标签: 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。 / p>

配置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。)

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

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

提前谢谢!

修改

Innerexception中的堆栈说:

  • System.Net.WebException :无法建立与远程服务器的连接
  • System.Net.Sockets.SocketException :连接失败,因为主机在一段时间后没有应答,或连接出现故障,因为连接的主机没有应答。

4 个答案:

答案 0 :(得分:2)

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

  • 已更改: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作为前缀非常重要。 (现在改变了我的回答)

答案 1 :(得分:0)

我不确定你是如何托管你的服务的,IIS?

我没有在配置中看到任何错误,除了

  <security mode="None">
    <transport clientCredentialType="Windows" proxyCredentialType="None"
        realm="" />
    <message clientCredentialType="Windows" negotiateServiceCredential="true"/>
  </security>

如果您说当您在IE中输入地址时看到该服务,那么它会让我相信它的安全设置是错误的。尝试从客户端配置文件中删除安全块,或者从哪里获取它,看看是否有效....

如果确实如此,我们可能会缩小范围......

答案 2 :(得分:0)

您是否只是在客户端的地址中输入了一个拼写错误?

address="http://www.domain.com/Service.scv"

不应该是

address="http://www.domain.com/Service.svc" 

(.svc代替.scv结尾)(确认为现实中没有拼写错误)

此外,这个地址会表明你的* .svc文件在那台机器的根目录 - 真的是这样吗?通常在IIS中,您的地址将由机器名,* .svc文件所在的虚拟目录和* .svc文件本身组成,如下所示:

http://www.domain.com/ServiceDirectory/Service.svc

答案 3 :(得分:0)

这里的问题可能与true vs True

的情况一样简单
<proxy usesystemdefault="True" />