2010-06-14 47 views
3

在生产服务器(Windows Server 2003 SP2)上,我可以使用Internet Explorer 8连接到远程WCF服务:当浏览到URL http://www.domain.com/Service.svc(我的服务侦听的地方)时,显示所需服务的信息页面。 Internet Explorer中的连接设置仅指定“自动检测”,禁用代理设置。浏览器连接到WCF服务,但不是我的WCF客户端。可能是什么原因?

如果我在同一台服务器上启动一个控制台应用程序(使用.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客户端将采用IE浏览器的“自动检测”设置,然后以同样的方式连接到像安装了IE的服务。)

我也有切换在真实之间的绑定配置的useDefaultWebProxy设置并没有成功的假。

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

预先感谢您!

编辑:

堆栈中Innerexception是说:

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

回答

2

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

  • 改变:useDefaultWebProxy="false"(而不是true
  • 补充:proxyAddress="http://10.20.30.40:8080"(EDIT2:不仅IP地址与http://的前缀是很重要的,否则它会抛出新的异常,请参阅下面的后续问题!)

由此WebException和SocketConnection消失客户似乎连接到该服务,但在调用第一个服务操作时,我现在有下一个问题。我会把这个问题提出一个新问题。

编辑:这里是后续问题:

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

EDIT2:根据后续问题的答案它的前缀proxyAddresshttp是很重要的。 (现改为我的答案)

+0

我知道这个线程很旧,但我一直在遇到这个问题,并最终在这里。我仍然不明白为什么“UsesSystemDefault = true”设置不起作用 - 如果逻辑成立,它应该导致WCF服务使用IE配置的代理设置 - 但它不是;代理地址仍然需要在WCF客户端中显式配置。任何人对此有解释? – PIntag 2015-03-27 15:52:05

0

我不知道你如何托管你的服务,IIS?

我没有看到比

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

如果说,当你在看到该服务的IE浏览器的地址类型,然后领我相信什么毛病确实在配置方面,其他这是安全设置是错误的。尝试从客户端配置文件中删除安全块,或者从任何地方删除安全块,然后查看是否有效。...

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

+0

的情况一样简单。安全模式在服务和客户端都设置为“无”。该服务托管在Windows Server 2008上的IIS 7.0中,如果有的话。令我困惑的是,它可以从我的删除计算机上运行,​​但不能从生产机器运行 - 具有相同的配置。 – Slauma 2010-06-15 00:22:55

+0

这是实际的端点“address =”http://www.domain.com/Service.scv“还是你在开发机器上使用”localhost“? – VoodooChild 2010-06-15 01:22:46

+0

不,我正在测试一个”live“服务 - 也在我的开发机器上,所以服务地址在两个配置中,在我的开发客户端和生产客户端上都是完全一样的(另见我对marc_s的回答的评论) – Slauma 2010-06-15 13:31:00

0

你也许刚在客户端的地址上输入一个错字?

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

难道不应该是(.SVC而不是在年底.scv)

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

(确认为在现实中没有错字)

而且,这个地址将表明您* .svc文件位于该机器的根目录下 - 是这种情况吗?通常,在IIS,你的地址会由机器名,其中* .svc文件所在的虚拟目录,而* .svc文件本身,所以像:

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

啊,对不起,它写在我的这个问题实际上是'svc'(我在我的问题中已经改变了它),我猜测它也是一样的(我从开发移植到生产机器时可能写错了),特别是因为它深夜我只在眼前看到了一个旋转配置标签的汤,为了确保地址正确,我复制并粘贴了它,然后从dev到生产配置文件。所以最后:dev配置中的地址与生产配置中的地址完全相同。 – Slauma 2010-06-15 13:21:35

+0

是的,svc文件真的在IIS站点的根目录中。它似乎工作(从我的开发机器)。但是这种不好的做法(从安全角度来看,可能是?)?在子文件夹中它应该更好吗? svc文件只有一行带有“,服务本身位于Bin文件夹中的单独DLL程序集中。 – Slauma 2010-06-15 13:27:09

+0

只是为了确保您的服务位于“.. \ Inetpub \ wwwroot \ ServiceDirectory”中? – VoodooChild 2010-06-15 14:28:50

0

这里的问题我已删除该块,但它并没有帮助可能是作为真正的VS真

<proxy usesystemdefault="True" />