在对 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.
我正在尝试在对 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
为此,我发现 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.