2012-02-28 76 views
3

我有一个Azure Web角色,它访问基于外部WCF的SOAP Web服务(端口80)以获取各种数据位。这项服务的反应非常不稳定。我经常得到以下错误。访问外部Web服务的Azure Web角色问题

没有端点收听 http://www.myexternalservice.com/service.svc可以接受该消息。这通常是由不正确的地址或SOAP操作导致的 。

要隔离问题,我创建了一个简单的控制台应用程序,以1秒的间隔重复调用此服务并记录所有响应。

using (var svc = new MyExternalService()) 
    { 
     stopwatch.Start(); 
     var response = svc.CallService(); 
     stopwatch.Stop(); 
     Log(response, stopwatch.ElapsedMilliseconds);  
    } 

如果我RDP到我的Azure的web实例之一,并运行这个程序需要10至20次尝试获取来自外部服务的有效响应之前。这些第一次尝试总是伴随着上述错误。在这个“热身期”之后,它运行良好。如果我停止了应用程序,然后立即重新启动,它必须通过相同的“预热”时间返回。

然而,如果我跑其他任何计算机此相同的应用程序,我立即收到有效答卷。我在运行于多个数据中心(非Azure)的服务器,不同网络上的桌面等上运行此记录器应用程序......这些测试运行始终非常稳定。

我不确定为什么这个服务会在Azure环境中以这种方式反应。不幸的是,短期内我不得不打电话给这项服务,但我的用户不能容忍这种不一致。

Azure服务器上的网络流量捕获指示大量SynReTransmit以10秒的间隔在我遇到连接错误的同一时间内。一旦“预热”完成,SynReTransmit不再发生。

+0

你可以得到一个网络跟踪,看看你回来了什么? – Tom 2012-02-28 15:56:18

+1

我现在正在安装WireShark。 – 2012-02-28 16:03:24

+0

看起来这些请求从未将其发送到Web服务服务器。网络流量捕获指示多个SynReTransmit没有相关响应。 – 2012-02-28 20:49:34

回答

-1

我们发现一个解决方案对于这个问题,虽然我不完全满意它。在耗尽所有其他的行动方案后,我们将负载平衡器更改为第7层负载平衡第4层负载平衡。虽然这解决了丢失请求的问题,但我不确定为什么这会产生影响。

+0

你改变负载上的外部服务或Azure上的平衡? – Pete 2013-02-12 16:00:31

-1

部署Windows Azure应用程序的Windows Azure数据中心区域可能不在外部Web服务附近。您正在尝试的本地机器(可以正常工作)可能接近Web服务。这就是为什么Azure中可能存在巨大的延迟,这可能会导致它失败。

成功从Azure VM中的浏览器访问WSDL可能是由于浏览器缓存。从浏览器进行函数调用会告诉你它是否实际建立连接。

+0

Web服务数据中心实际上是蔚蓝的数据中心的几英里之内。另外,我还RDP'd到Azure的服务器和测试延迟,这是非常非常低的。我不是从浏览器浏览...的呼叫从一个控制台应用程序来。 – 2012-03-16 14:55:50