【问题标题】:Web service (asmx) POST test fails on specific load balanced serversWeb 服务 (asmx) POST 测试在特定负载平衡服务器上失败
【发布时间】:2014-08-29 19:59:52
【问题描述】:

我有一个包含一些 ASMX Web 服务的 ASP.NET WebApp。我们最近从 Windows 2003 服务器迁移到负载平衡的 Windows 2008 服务器。新服务器位于一些 F5 设备后面以进行负载平衡(这就是我所知道的一切!)。

我们可以访问内置的 ASP.NET POST 测试(例如:http://webapp.company.com/webservices/Person.asmx?op=GetPerson),但从该测试页面调用它失败(页面不可用)。浏览器中的新选项卡将打开,并使用相同的 url,但在末尾附加了一个端口号:http://webapp.company.com:50831/webservices/Person.asmx?op=GetPerson。当我将该 URL(带端口)放入浏览器时,它也失败了。哎呀,http://webapp.company.com:50831 根本无法访问。

我们在以前的服务器上没有得到它。我在个人 Windows 2012 服务器上设置了我自己的个人网络服务器,并在那里测试了相同的代码,它工作正常。所以我认为这与负载平衡有关。

很遗憾,我无法控制我们公司提供的用于托管内部应用程序的 Web 服务器。我也没有接触 IIS。我得到的只是一个将我的文件发布到的文件路径。托管组织告诉我我的 ASP.NET WebApp 代码附加了端口号,但我认为这不对。它只发生在那些负载平衡的服务器上!

在调用托管在 F5 设备后面的 ASMX 或 WCF 之前,是否有其他人遇到过这种情况?

【问题讨论】:

    标签: asp.net web-services asmx load-balancing f5


    【解决方案1】:

    维护这些服务器的 IT 小组没有为我们提供任何答案,但我们能够验证这些奇怪的端口实际上是由 F5 设备分配的。我们最终使用端口重写器作为解决方法,直到维护 Web 服务器的组可以更改配置。我们使用的代码直接取自下面的 URL,他们在该 URL 中讨论了同一个 F5 设备 (BigIP) 背后的相同问题。

    http://www.justskins.com/forums/port-mapping-a-web-51075.html

      public class WSDLAddress : SoapExtensionReflector
      {
        bool bFirstTime = true;
        public override void ReflectMethod()
        {
          if (!bFirstTime) return;
          bFirstTime = false;
    
          SoapAddressBinding sabAddress = ReflectionContext.Port.Extensions.Find(typeof(SoapAddressBinding)) as SoapAddressBinding;
    
          string sPort = ConfigurationSettings.AppSettings["myPort"];
    
          UriBuilder uriLocation = new UriBuilder(sabAddress.Location);
          uriLocation.Port = Int32.Parse(sPort);
    
          sabAddress.Location = uriLocation.Uri.AbsoluteUri;
        }
      }
    

    【讨论】:

      猜你喜欢
      • 2017-10-25
      • 1970-01-01
      • 2015-04-01
      • 2011-09-05
      • 2011-09-21
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多