.NET Framework 4.8.1 で HTTP GET モードの 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 を併せて確認してください。

関連記事