azure 向DiscoveryClientProtocol.DiscoverAny()请求添加身份验证标头

flseospp  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(103)

我正在更新一个我们已经使用了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中重新运行请求,它可以正常工作。我只需要了解是否有一种方法可以通过编程方式添加该头部。
这可能吗?如果可以,我需要做什么来添加标头或身份验证?
先谢谢你了!

yyyllmsg

yyyllmsg1#

感谢另一个张贴(谁也碰巧回答自己的问题),我能够弄清楚我需要做什么.这里是他们的问题/答案的链接参考:
adding http headers in call to SoapHttpClient service
解决方案是扩展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;
    }

希望这有助于任何人可能发生同样的情况出现!

相关问题