soap客户端从控制台应用程序工作,从wcf服务内部调用时超时

时间:2013-10-06 18:02:27

标签: c# wcf web-services soap

这是交易: 我有一个类库,通过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>

architecture

2 个答案:

答案 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中更改身份)网站。