这是交易: 我有一个类库,通过soap客户端调用Web服务。 从控制台应用程序中调用时,它可以正常工作。 当从一个由http调用调用的WCF服务中调用时,我得到一个“EndpointNotFoundException - 在http://blablabla.asmx没有可以接受该消息的端点。这通常是由不正确的地址或SOAP动作引起的。 。“
app.config和web.config都包含与客户端端点完全相同的配置
所以,最近怎么回事?顺便说一句,WCF从Visual Studio本地运行。我试图拨打的肥皂网服务位于互联网上。
这就是服务模型配置的样子。它使用基本身份验证以及用户和密码在类库中的代码中设置:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="VocalServerSoap">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://pseudourl.asmx"
binding="basicHttpBinding" bindingConfiguration="VocalServerSoap"
contract="VocalWebService.VocalServerSoap" name="VocalServerSoap" />
</client>
答案 0 :(得分:3)
最终全部因为代理......结果是(from msdn):
作为NT服务或作为ASP.NET的一部分运行的应用程序使用调用用户的Internet Explorer代理服务器设置(如果可用)。这些设置可能并非适用于所有服务应用程序。
所以我对从WCF服务中调用的soap服务的请求根本没有配置代理...因此无终点异常。
为了解决这个问题,我不得不在soap客户端绑定中手动声明代理:
<binding name="VocalServerSoap" proxyAddress="http://<your proxy address>:<proxy port>"
useDefaultWebProxy="false">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic" />
</security>
</binding>
那为什么我认为这是权限?为什么它不时起作用? 好吧,Fiddler给我带来了真正的困惑....当激活fiddler时,由于fiddler正在使用系统代理,因为所有传出请求都正确地路由到代理,所以一切正常。
我无法相信这几乎浪费了我生命中的一天:(
答案 1 :(得分:2)
更新:事实证明这不是问题。请参阅我的下一篇文章以获得澄清
感谢来自this post的帮助 问题是权限 - 从WCF范围运行代码的应用程序池标识没有Internet访问权限。一旦我在拥有权限的用户下运行网站(在IIS中更改身份)网站。