0

我有一个包含一些 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 之前,是否有其他人遇到过这种情况?

4

1 回答 1

0

维护这些服务器的 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;
    }
  }
于 2014-11-09T06:06:43.117 回答