我有一个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不再发生。
你可以得到一个网络跟踪,看看你回来了什么? – Tom 2012-02-28 15:56:18
我现在正在安装WireShark。 – 2012-02-28 16:03:24
看起来这些请求从未将其发送到Web服务服务器。网络流量捕获指示多个SynReTransmit没有相关响应。 – 2012-02-28 20:49:34