2009-03-12 6 views
1

우리의 웹 서비스는 포트 포워딩을 사용하여 실제 웹 서버에 연결하는 라우터를 통해 액세스됩니다. Visual Studio에서 웹 참조를 설정하려고 할 때 .NET Framework가 발견시 참조 용으로 Visual Studio에 포트가있는 전체 URL을 반환하는 것으로 보입니다. 그런 다음 Visual Studio는 프록시 객체 (또는 무엇이든)를 만들기 위해 해당 웹 서비스에 대한 연결을 시도하고 비표준 포트에 대한 액세스를 허용하지 않기 때문에 거부됩니다.비표준 포트에서 .NET 웹 서비스를 사용하려면 어떻게해야합니까?

원래 웹 서비스 URL

http://webservices.example.com/SomeService.asmx 
라우터에서

반환 된 웹 서비스 URL

http://webservices.example.com:25001/SomeService.asmx 

는 .NET 프레임 워크에서 URL을 반환 포트를 포함하지 만드는 방법을 알고 있다면 내 질문은 발견 호출. 이 트릭 할 수

diagram

+0

WCF 서비스 또는 .net 웹 서비스에 연결을 시도하고 있습니까? – lomaxx

+0

.net 웹 서비스 –

+0

@Ian - 다이어그램이 렌더링되지 않고 사이트가 시간 초과됩니다. – Kev

답변

1

:

using System.Configuration; 
using System.Web.Services.Description; 

namespace Thinktecture.Tools.Web.Services.Metadata 
{ 
    public class SoapAddressReflector : SoapExtensionReflector 
    { 
    public override void ReflectMethod() 
    { 
     ServiceDescription sd = ReflectionContext.ServiceDescription; 

     foreach (Service service in sd.Services) 
     { 
     foreach (Port port in service.Ports) 
     { 
      foreach (ServiceDescriptionFormatExtension extension in port.Extensions) 
      { 
      if (extension is SoapAddressBinding) 
      { 
       SoapAddressBinding address = (SoapAddressBinding)extension; 

       // Set the address here: 
       address.Location = ConfigurationManager.AppSettings["SoapAddress"]; 
      } 
      } 
     } 
     } 
    } 
    } 
} 
을 : 여기

Manually setting soap:address in ASMX

을 링크가 죽으면 단지의 경우 코드 조각이있어 여기에이 과정을 도시 한 도면이다

구성 :

<configuration> 
<appSettings> 
    <add key="SoapAddress" value="http://www.thinktecture.com/Test/"/> 
</appSettings> 

<system.web> 
    <webServices> 
    <soapExtensionReflectorTypes> 
     <add type="Thinktecture.Tools.Web.Services.Metadata.SoapAddressReflector, SoapAddressReflector"/> 
    </soapExtensionReflectorTypes> 
    </webServices> 
</system.web> 
</configuration> 

업데이트 :

기술은 위의 잘 작동하는 것 같다하지만 당신은 하나 개 이상의 서비스를 사용하면 몇 가지 제한 사항이 있습니다. 전체 신뢰로 실행해야하므로 부분 신뢰 환경에서이 작업을 수행하지 않을 수도 있습니다.

SoapExtensionReflector을 사용하는 것 외의 다른 마법 설정 스위치 나 속성이 있는지 잘 모르겠습니다. 좋은 구글 주위에, 모든 결과를 SoapExtensionReflector 방법을 가리킨 후.

하지만 어때? 웹 서비스가 생성 된 WDSL의 복사본을 가져올 수있는 모든 것을 자주 변경하지 않으면 SOAP/HTTP 바인딩을 편집 한 다음 정적 XML 파일로 자체 게시하십시오.

+0

감사합니다. Kev. Google은 앱 내에서 여러 가지 서비스를 제공합니다. 포트 또는 무언가를 포함하지 않도록 업데이트 할 수있는 구성 설정이 필요합니다. 희망찬 생각은 아마 :). –

+0

추가 정보를 제공해 주셔서 감사합니다.우리의 애플 리케이션은 이미 생산 단계에 있지만 네트워크 아키텍처가 조금 바뀌고 있습니다. 우리는 정말로 인간적으로 가능하다면 앱 자체를 변경하지 않는 것이 좋습니다. 추가 정보와 추가 노력에 +1. 감사! –

+0

아니 prbs, 감사하겠습니다. :) – Kev

관련 문제