簡體   English   中英

soap客戶端從控制台應用程序工作,在wcf服務中調用時超時

[英]soap client working from console app, timeout when called from within wcf service

這是交易:我有一個類庫,可通過soap客戶端調用Web服務。 從控制台應用程序中調用時,它可以正常工作。 當從通過http調用調用的WCF服務中進行調用時,我收到“ EndpointNotFoundException-在http://blablabla.asmx上沒有偵聽端點可以接受消息的消息。這通常是由於地址錯誤或SOAP操作引起的......”

app.config和web.config都包含客戶端端點的完全相同的配置

發生什么了? 順便說一句,WCF正在Visual Studio本地運行。 我嘗試調用的soap Web服務位於Internet上。

這就是服務模型配置的樣子。 它使用基本身份驗證以及用戶名和密碼在類庫中的代碼中進行設置:

<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>

建築

哦。。。無奈! 在我以為我將它作為權限問題確定下來之后(根據我之前的帖子),它恢復為超時的相同行為。

最終,這全是因為代理...。事實證明( 來自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>

那么,為什么我認為這是權限? 它為什么不時起作用? 好吧,小提琴手給我帶來了一個真正的困惑。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

我不敢相信這浪費了我近一整天的時間:(

更新:事實證明這不是問題。 請參閱我的下一篇文章以進行澄清

歸功於這篇文章的幫助。問題在於權限-從WCF范圍運行代碼的應用程序池標識沒有Internet訪問權限。 一旦我在具有權限的用戶下運行網站(在IIS中更改身份)網站,它就會起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM