2009-11-17 193 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