在生产服务器(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
中的堆栈说:
答案 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" />