在对 ASMX 服务的调用中自定义 HTTP header

Customising HTTP header in calls to ASMX service

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

Some SO posts 谈论 SOAP headers,这不是我想要的,因为这涉及到向 POST 消息的 body 添加元素,即这个部分:

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

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

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

为此,我发现 描述了添加服务引用、选择较旧的 Web 引用、然后选择代理 class 并覆盖 GetWebRequest。不幸的是,在 Visual Studio 2017 中,选择替代代理 class 似乎不是一个选项。否则,这将是一个不错的选择。

问题:我是否遗漏了什么(显而易见的)导致为生成的 ASMX 服务客户端选择代理 class class?

This answer to a similar question (also this one) 谈论使用 OperationContextScope 将自定义 header 添加到 WCF 请求。我想我可以将该服务添加为 WCF 服务并使用它。将解决方案代码从使用生成的 ASMX 客户端名称空间转换为生成的 WCF 客户端只是更改 using 语句中的名称空间的问题 - 其他一切都相同。

不幸的是,实际上使用 WCF 客户端调用 ASMX 服务失败了,因为请求 body 中生成的 XML 完全不同。

问题: 我是不是遗漏了一些有关在 WCF 上使用 ASMX 的信息,这导致了这个问题,或者仅仅是因为这是不可能的? (This article 似乎表明这是可能的。)

找到 this post,它指出单独文件中的部分 class 应该用于覆盖 GetWebRequest() 并插入自定义 headers.