gpt4 book ai didi

c# - 如何从 WCF 中的客户端消息检查器获取 header 值

转载 作者:太空宇宙 更新时间:2023-11-03 19:28:16 25 4
gpt4 key购买 nike

我正在为我正在处理的一些服务创建一个 Web 测试客户端,作为其要求的一部分,我希望能够显示完整的请求和响应 SOAP 消息(以及 HTTP header 到用户)。

我实现了一个实现 IClientMessageInspector 的 MessageInspector 类,最值得注意的是 BeforeSendRequestAfterReceiveReply 方法,分别用于访问请求和响应消息。

捕获响应 (AfterReceiveReply) 效果很好,但捕获请求仅部分起作用。我可以访问大部分消息,但是 SOAP header 和 HTTP header 都是空的。在 Fiddler 中查看请求,我可以看到 WCF 正在 SOAP 消息中发送安全 header 和“一堆”HTTP header 。

我的BeforeSendRequest 方法非常简单……要点是……

public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
this.RequestMessage = request.ToString(); // Security header is missing from message

// Try to get HTTP headers
object req; // req is always null
if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out req))
{
this.RequestHeaders = ((HttpRequestMessageProperty)req).Headers;
}

return null;
}

我不确定为什么缺少 HTTP 和安全 header 。有更好的方法吗?

  • 韦恩

最佳答案

检查员在消息存在格式化程序之后立即查看消息,并且在它到达任何协议(protocol) channel (例如安全性)之前(可能)在传递消息之前更改消息(参见帖子中的图表)关于 https://learn.microsoft.com/en-us/archive/blogs/carlosfigueira/wcf-extensibility-channels 的 WCF channel )。因此,在检查员级别,您将无法找到消息添加的任何其他 SOAP header 。 HTTP header 由传输添加,在消息通过消息检查器后也会到达。

如果您想查看消息中的所有 SOAP header ,您可以创建一个新的“协议(protocol)” channel (http://msdn.microsoft.com/en-us/library/ms751495.aspx 中的示例正是这样做的)或一个新的消息编码器(它可以包装现有的编码器,并在编码之前检查传出消息)。

要查看 HTTP header 就更难了,因为传输是消息在 WCF 中传递的最后一部分。我认为您可以编写自定义传输 channel 来执行此操作,但这肯定需要很多代码。

关于c# - 如何从 WCF 中的客户端消息检查器获取 header 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6919233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com