2

事情是这样的:我有一个类库,它通过肥皂客户端调用 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>

建筑学

4

2 回答 2

3

呵呵……郁闷!在我认为我已将其确定为权限问题(根据我之前的帖子)之后,它恢复为相同的超时行为。

最终这一切都是因为代理......事实证明(来自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 正在使用系统代理。

我不敢相信这几乎浪费了我生命中的一天:(

于 2013-10-09T18:47:48.783 回答
2

更新:事实证明这不是问题。请参阅我的下一篇文章以获得澄清

多亏了这篇文章 的帮助,才解决问题是权限问题——从 WCF 范围运行代码的应用程序池标识没有访问 Internet 的权限。一旦我在具有工作权限的用户下运行 Web(在 IIS 中更改身份)站点。

于 2013-10-07T11:49:32.747 回答