- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在为我正在处理的一些服务创建一个 Web 测试客户端,作为其要求的一部分,我希望能够显示完整的请求和响应 SOAP 消息(以及 HTTP header 到用户)。
我实现了一个实现 IClientMessageInspector 的 MessageInspector 类,最值得注意的是 BeforeSendRequest
和 AfterReceiveReply
方法,分别用于访问请求和响应消息。
捕获响应 (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/
我是一名优秀的程序员,十分优秀!