我正在更新一个我们已经使用了10多年的旧工具,它类似于SoapUI,但是基于c#。原始代码使用此函数连接到WCF web服务并下载WSDL信息:
DiscoveryClientProtocol discoveryClientProtocol = new DiscoveryClientProtocol();
discoveryClientProtocol.AllowAutoRedirect = true;
discoveryClientProtocol.UseDefaultCredentials = true;
discoveryClientProtocol.DiscoverAny(serviceDescriptionURL.URL);
discoveryClientProtocol.ResolveAll();
我们最近将我们的WCF web服务迁移到云端,我需要能够向URL发送包含所有请求的身份验证头。我知道DiscoveryClientProtocol是继承自HttpWebClientProtocol和WebClientProtocol,但到目前为止,我还没有弄清楚如何修改代码,以包括一个头。
我试着玩CookieContainer()集合,看看添加System.Net.Cookie是否会转换为身份验证头,但到目前为止,添加cookie的所有尝试都失败了,出现了各种错误消息。我不知道这是不是一条正确的路。
我还使用Fiddler捕获了流量,可以看到请求遇到了预期的身份验证错误。如果我在Fiddler中使用正确的报头重新运行请求,它就能正常工作。我只需要了解是否有一种方法可以通过编程方式添加标题。
这可能吗?如果是这样,我需要做些什么来添加标头或身份验证?
提前感谢!
感谢另一个帖子(他也碰巧回答了他们自己的问题),我能够弄清楚我需要做什么。这里是他们的问题/答案的链接供参考:
在调用SoapHttpClient服务时添加http报头
解决方案是扩展DiscoverClientProtocol类,然后覆盖底层的GetWebRequest方法。下面是我所做的一个例子:protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
var request = base.GetWebRequest(uri);
// Add custom headers
foreach (Header header in HeaderList)
{
request.Headers.Add(header.HeaderKey, header.HeaderValue);
}
return request;
}
希望这有助于任何人可能碰巧有同样的情况出现!