HTTP GET 모드에서 .NET Framework 4.8.1의 WCF 메타데이터 검색을 위해서는 최종 SOAP 클라이언트만이 아니라 앞선 메타데이터 요청을 구성합니다. 보호된 GetWebRequest 후크가 별도로 관리되는 경로를 적용할 수 있습니다:

class RoutedMetadataClient : MetadataExchangeClient
{
    private readonly IWebProxy route;

    public RoutedMetadataClient(IWebProxy route)
    {
        this.route = route;
    }

    protected override HttpWebRequest GetWebRequest(
        Uri location, string dialect, string identifier)
    {
        HttpWebRequest request =
            base.GetWebRequest(location, dialect, identifier);
        request.Proxy = route;
        return request;
    }
}

형식은 System.Net 및 System.ServiceModel.Description에서 가져옵니다. 이 클라이언트를 의도한 WebProxy로 생성하고 WSDL URL에는 HttpGet 모드를 사용합니다. 프록시 계정은 해당 개체에 지정합니다. 메타데이터 서버 인증은 별개입니다.

루트 WSDL이 성공했지만 이후 확인이 실패하면 가져오기를 따라가십시오. 다른 WSDL과 스키마는 다른 호스트나 프로토콜을 사용할 수 있습니다.

다른 검색 모드에는 해당 확장을 선택합니다. WS-MetadataExchange는 채널을 사용하며, 그 생성 후크는 GetChannelFactory입니다. 해당 바인딩과 프록시 설정은 HttpWebRequest 재정의로 일괄 대체되지 않습니다.

참여하는 모든 레거시 구성 요소가 공유해야 할 때는 기본 애플리케이션 프록시로 충분할 수 있습니다. 하위 클래스는 이 API 제품군 내에서 메타데이터를 명시적으로 소유하기 위한 것입니다. 생성된 SOAP 호출에는 여전히 자체 런타임 전송 구성이 필요합니다. BasicHttpBinding 클라이언트의 경우 ProxyAddress와 UseDefaultWebProxy를 함께 확인하십시오.

관련 글