.NET Framework 上的 WCF:HTTP GET 元数据代理设置
配置旧版 WCF 元数据获取路径(包括 HTTP 导入),与最终的 SOAP 服务客户端分开处理。
在 .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。