c# - Azure Web 角色访问外部 Web 服务时遇到问题

标签 c# .net wcf web-services azure

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

There was no endpoint listening at http://www.myexternalservice.com/service.svc that could accept the message. This is often caused by an incorrect address or SOAP action.

为了隔离问题,我创建了一个简单的控制台应用程序,以 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 环境中会有这样的 react 。不幸的是,短期内我被迫调用此服务,但我的用户无法容忍这种不一致。

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

最佳答案

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

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

关于c# - Azure Web 角色访问外部 Web 服务时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9484976/

相关文章:

c# - 在类初始值设定项中使用隐式类型数组

c# - Selenium Webdriver + PhantomJS 保持在大约 :blank for a specific site

c# - 如何使用正则表达式拆分字符串

c# - 如何从逻辑层访问 View ?

.net - 如何调用本地WCF服务?

c# - 安装 DotNET 4.5 时,SvcUtil/edb 不会生成 INotifyPropertyChange

c# - 试图播放 Resources 文件夹中的 .wav 文件,它在那里,但 visual studio 说它不是!

c# - 在PNG图像中用白色替换透明背景

c# - 如何避免 View 模型的冗余属性

c# - 生成 wcf 代理与 ChannelFactory