2014-07-08 4 views
0

일부 ASMX 웹 서비스가 포함 된 ASP.NET 웹 애플리케이션이 있습니다. 우리는 최근에 Windows 2003 서버에서로드 균형 조정 된 Windows 2008 서버로 마이그레이션했습니다. 새로운 서버는로드 밸런싱을 위해 일부 F5 어플라이언스 뒤에 있습니다 (이것이 내가 아는 전부입니다!).웹 서비스 (asmx) 특정로드 균형 조정 서버에서 POST 테스트가 실패합니다.

내장 된 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 서버에 개인 웹 서버를 설치하고 거기에 동일한 코드를 테스트하여 작동했습니다. 그래서로드 밸런싱과 관련이 있다고 생각합니다.

불행히도 내부 애플리케이션 호스팅을 위해 당사가 제공하는 웹 서버를 제어 할 권한이 없습니다. 나도 IIS를 건드리지 않아. 내가받는 파일은 내 파일을 게시 할 파일 경로입니다. 호스팅 조직에서 내 ASP.NET WebApp 코드가 포트 번호를 추가한다고 말하고 있지만 그것이 옳다고 생각하지 않습니다. 부하가 분산 된 서버에서만 발생합니다!

F5 어플라이언스에서 호스팅되는 ASMX 또는 WCF를 호출 할 때 다른 사람이이 문제를 겪었습니까?

답변

0

해당 서버를 유지 관리하는 IT 그룹은 우리에게 아무런 답변이 없었지만 실제로 이상한 포트가 F5 어플라이언스에 할당되었는지 확인할 수있었습니다. 웹 서버를 유지 관리하는 그룹이 구성을 변경할 때까지 포트 재 작성기를 사용하여 해결 방법을 완성했습니다. 우리가 사용한 코드는 아래의 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; 
    } 
    }