代码之家  ›  专栏  ›  技术社区  ›  Slauma

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

  •  3
  • Slauma  · 技术社区  · 14 年前

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

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

    <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客户端将采用internetexplorer的“自动检测”设置,然后以与安装的IE相同的方式连接到服务。)

    useDefaultWebProxy 在绑定配置中设置true和false之间没有成功。

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

    编辑:

    叠加 Innerexception 他说:

    • :无法建立到远程服务器的连接
    • System.Net.Sockets.SocketException异常
    4 回复  |  直到 14 年前
        1
  •  3
  •   Community omersem    7 年前

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

    • 改变: useDefaultWebProxy="false" (代替 true )
    • proxyAddress="http://10.20.30.40:8080" (Edit2:不仅仅是IP地址!前缀为 http:// 这很重要!否则会抛出新的异常,请参见下面的后续问题。)

    编辑:下面是后续问题:

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

    Edit2:根据后续问题中的答案,在 proxyAddress http . (现在更改了我的答案)

        2
  •  0
  •   marc_s Anurag    14 年前

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

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

    (.svc而不是最后的.scv)(确认为没有输入错误)

    http://www.domain.com/ServiceDirectory/Service.svc
    
        3
  •  0
  •   John Saunders    14 年前

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

    如果是的话,我们可能会缩小范围。。。

        4
  •  0
  •   Paul    9 年前

    这里的问题可能和真对真的情况一样简单

    <proxy usesystemdefault="True" />