“无法连接到远程服务器”

时间:2009-11-17 23:35:26

标签: wcf wse3.0

我可以从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表单程序调用它就好了。

然而 - 这就是Ping所展示的内容,对我来说看起来有点疑问:

C:\ Users \ uxnxw01&gt; ping 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 - 在下面的评论中发布了一些结果。但是,在阅读之后,它并不总是说“目的地无法到达”。但是在它失败的情况下,我从来没有得到任何数据包。我仍然困惑下一步该做什么。我一直在比较数据包,但它很慢而且令人困惑。例如,我仍然没有找到我在请求数据包中传递的密钥(特定的policyNum)。我也看到了一些有效的“目标无法访问”语句。

在有效的那个,我从未见过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不会使用相同的代理?

4 个答案:

答案 0 :(得分:3)

感谢上面的所有帮助 - 但这是真正的答案:

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

在IIS下运行的WCF服务显然不使用相同的代理,因此我在代码中手动设置它。我将发布另一个问题,看看是否有办法在配置文件中执行此操作。

答案 1 :(得分:2)

防火墙上可能禁用Ping请求(ICMP数据包)。因此,完全有可能不能获得ping响应,同时能够访问不同端口上的盒子。

尝试并使用telnet连接到端口80上的66.77.241.56并查看是否收到回复。

telnet 66.77.241.56 80

或者,tracerte到所述IP地址可能会为您的某个网络管理员提供更详细的信息,因为它可能与网络路由或NAT同样如此。

第三种可能性是您可能需要在Proxy SOAP客户端实例上显式设置SoapHttpClientProtocol属性。 WinForms会自动选择它,但是从Web服务/应用程序来看并非如此。

答案 2 :(得分:2)

您可能希望使用Wireshark来查看网络流量的变化情况。

答案 3 :(得分: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>