2009-11-17 194 views
4

我可以通過Windows窗體程序調用第三方供應商的Web服務。當我嘗試調用從一個WCF Web服務,我得到了下面的錯誤相同的Web服務和Web方法和相同的URL:「無法連接到遠程服務器」

ExportValuationPolicyNumber:Exception=System.Net.WebException: Unable to connect to the remote server ---> 
System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly 
respond after a period of time, or established connection failed 
because connected host has failed to respond 66.77.241.76:80 

    at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) 
    at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception) 
    --- End of inner exception stack trace --- 
    at System.Net.HttpWebRequest.GetRequestStream() 
    at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) 
    at TFBIC.RCT.WCFWebServices.ExpressLync.ValuationServiceWse.ExportValuationPolicyNumber(String PolicyNumber) in c:\Source\TFBIC.RCT.WCFWebServices\TFBIC.RCT.WCFWebServices\Web References\ExpressLync\Reference.cs:line 519 
    at TFBIC.RCT.WCFWebServices.ValuationService.ExportValuationPolicyNumber(String PolicyNumber) in c:\Source\TFBIC.RCT.WCFWebServices\TFBIC.RCT.WCFWebServices\ValuationService.svc.cs:line 97 

基本上,我試圖寫爲供應商的.asmx/WSE3一個WCF包裝服務。讓我們不要錯過 - 但微軟表示WCF可以調用WSE3,但只有打開SSL,我的供應商纔會相信 - 不允許SSL連接。所以我堅持寫包裝,所以我可以從BizTalk 2009調用。現在,我通過Console程序測試包裝。

我甚至可以做些什麼來調試?我在WCF服務之前和之後添加了EventLog跟蹤,在這裏它調用了.asmx服務 - 所以我知道這是它吹來的地方(加上上面錯誤中的行號)。

我在我的web.config以下:

<microsoft.web.services3> 
     <diagnostics> 
       <trace enabled="true" 
          input="c:\inetpub\wwwroot\wsetraces\InputTrace.webinfo" 
          output="c:\inetpub\wwwroot\wsetraces\OutputTrace.webinfo" /> 
       <detailedErrors enabled="true" /> 
     </diagnostics> 
</microsoft.web.services3> 

,我已經給該目錄的完全訪問每個人 - 但沒有跟蹤在那裏出現。

有什麼東西我可以找或嘗試旁邊調試呢?

從理論上講,「ping」結果應該不重要,因爲該網站正在使用Windows窗體程序進行工作,該窗口程序稱它爲好。

然而 - 這裏是中國平安表示,它看起來有點可疑的對我說:

C:\用戶\ uxnxw01>平rct.msbexpress.net

Pinging rct.msbexpress.net [66.77.241.56] with 32 bytes of data: 
Reply from 10.193.99.5: Destination net unreachable. 
Reply from 10.193.99.5: Destination net unreachable. 
Request timed out. 
Reply from 10.193.99.5: Destination net unreachable. 

Ping statistics for 66.77.241.56: 
    Packets: Sent = 4, Received = 3, Lost = 1 (25% loss), 

感謝,

Neal Walters


WireShark分析

我確實運行過Wireshark - 在下面的評論中發佈了一些結果。但是,閱讀更多內容後,它並不總是說「Destination Unreachable」。但在失敗的情況下,我從來沒有得到任何數據。我仍然困惑下一步該做什麼。我一直在比較數據包,但速度緩慢且令人困惑。例如,我仍然沒有找到在請求數據包中傳遞的密鑰(特定的policyNum)。我還在工作中看到了一些「Destination Unreachable」聲明。

在那個工程中,我從來沒有看到66.77.241.76,我只看到我們公司的代理。但是我看不到任何會告訴WSE3使用或不使用代理的配置(或代碼)。


的Telnet結果:

C:\Users\uxnxw01>telnet 66.77.241.56 80 
Connecting To 66.77.241.56...Could not open connection to the host, on port 80: 
Connect failed 

C:\Users\uxnxw01>telnet 66.77.241.76 80 
Connecting To 66.77.241.76...Could not open connection to the host, on port 80: 
Connect failed 

我不知道這是什麼證明。就像我說的那樣,我可以通過直接調用它的WSE3接口,從Windows窗體調用相同的Web服務。我知道我可以那樣到達那裏。

我在想這兩個程序的主要區別在於它是在Win Form下運行並直接調用WSE3。那個可以工作。發生故障的基本上是99%相同的代碼,作爲WCF服務發佈,所以它在IIS下運行(然後控制檯程序調用我的機器上的WCF/IIS服務,該服務又調用WSE3服務)。

是否有某些原因IIS不會使用相同的代理?

回答

3

感謝所有上面的幫助 - 但這裏是真正的答案:

valservice.Proxy = new System.Net.WebProxy(「http://10.192.xx.xx:8080」,true);

在IIS下運行的WCF服務顯然不使用相同的代理,所以我在代碼中手動設置它。我會發布另一個問題,看看是否有辦法在配置文件中執行此操作。

+2

是的,根據我的答案中的第三個選項。 ;-) – 2009-11-18 16:12:18

+0

你也可以做到這一點在web.config中 ' \t <代理usesystemdefault = 「假」 proxyaddress = 「HTTP://your.proxy.ip」/> ' – Ketan 2012-07-13 20:53:58

2

防火牆上的ping請求(ICMP數據包)可能被禁用。所以完全有可能不能得到ping迴應,同時能夠訪問不同端口上的盒子。

嘗試並使用telnet連接到端口80上的66.77.241.56,看看是否得到響應。

telnet 66.77.241.56 80

或者,一個tracerte到所述IP地址可以提供一些更詳細的信息,爲您的網絡管理員之一,因爲它同樣有網絡路由或NAT做。

第三種可能性是,您可能需要在SoapHttpClientProtocol SOAP客戶端實例上明確設置Proxy屬性。 WinForms會自動選擇它,但是從Web服務/應用程序來看,情況並非如此。

+0

+1,這也是我的回答。 – CodingWithSpike 2009-11-18 14:45:18

+0

查看我原始問題底部的結果。不知道這證明了什麼。 – NealWalters 2009-11-18 15:29:55

+0

(必須在Win 2008服務器上啓用Telnet功能 - 或者早些時候會這樣做)。 – NealWalters 2009-11-18 15:30:46

2

您可能希望使用Wireshark來查看網絡流量情況。

+0

當我直接運行表單直接運行到WSE3時,它可以工作。當我將控制檯程序運行到WCF包裝器時,它顯然會失敗,並顯示「代理無法訪問目標」和「通信管理過濾器」。但是,代理人如何知道一方與另一方之間的區別? – NealWalters 2009-11-18 14:37:09

+0

如果您可以通過telnet進行連接,就像@Wim建議的那樣,那麼我會爲'舊'WinForms應用程序和您的WCF應用程序運行Wireshark會話,並比較數據包的內容。客戶端可能正在連接,但服務器可能未提供響應。也許數據結構略有不同,服務器無法處理請求。 – CodingWithSpike 2009-11-18 14:49:41

+0

請參閱原始問題底部的修改。 – NealWalters 2009-11-18 14:56:29

0

見我在其他人的帖子評論過,但除此之外,關係到你的診斷日誌,這是我在我的配置轉儲WCF跟蹤日誌的XML:

<configuration> 

    <system.diagnostics> 
     <sources> 
      <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true"> 
       <listeners> 
        <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData= "MyService.svclog" /> 
       </listeners> 
      </source> 
     </sources> 
    </system.diagnostics> 

</configuration> 
+0

謝謝,但錯誤發生在調用非WCF .asmx WSE3 Web服務的WCF程序中。它是WSE服務的WCF包裝器。 – NealWalters 2009-11-18 15:24:15