在生产服务器 (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/