自定义调用 ASMX 服务时的 HTTP 标头



我正在尝试在对ASMX服务的调用中添加HTTP标头。

一些SO帖子谈论SOAP标头,这不是我想要的,因为这涉及向POST消息的正文添加元素,即以下部分:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope ...>
<soap:Body ...>
<q2:HeaderIn ...>

我想要的是添加到请求的这一部分 - HTTP 标头:

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.42000)
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://..."
Host: ...
Content-Length: 2018

为此,我找到了 2015 年的一篇文章,其中描述了添加服务参考,选择较旧的 Web 参考,然后选择代理类并覆盖GetWebRequest。不幸的是,在Visual Studio 2017,选择替代代理类似乎不是一个选项。否则,这将是一个不错的选择。

问题:我是否缺少导致为生成的 ASMX 服务客户端类选择代理类的内容(显而易见的(内容?

这个类似问题的答案(也是这个问题(讨论了如何使用OperationContextScope向 WCF 请求添加自定义标头。我想我可以将该服务添加为 WCF 服务并使用它。将解决方案代码从使用的生成的 ASMX 客户端命名空间转换为生成的 WCF 客户端只需更改using语句中的命名空间 - 其他一切都相同。

遗憾的是,实际使用 WCF 客户端对 ASMX 服务进行调用会失败,因为请求正文中生成的 XML 完全不同。

问:我是否缺少有关在 WCF 上使用 ASMX 导致此问题的内容,或者只是因为它是不可能的?(本文似乎表明这是可能的。

发现这篇文章指出,应该使用单独文件中的部分类来覆盖GetWebRequest()并插入自定义标头。

最新更新