如何从 WCF 中的客户端消息检查器获取标头值

2023-12-03

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

我实现了一个 MessageInspector 类实现IClient消息检查器,最值得注意的是BeforeSendRequest and AfterReceiveReply分别访问请求和响应消息的方法。

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

My 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 和安全标头丢失。有一个更好的方法吗?

  • Wayne

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

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

要查看 HTTP 标头比较困难,因为传输是消息在 WCF 中传递的最后一部分。我认为你可以编写一个自定义传输通道来做到这一点,但这肯定会需要很多代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 WCF 中的客户端消息检查器获取标头值 的相关文章

随机推荐

  • 如何在没有秒的情况下格式化 MySQL TIMEDIFF?

    我正在运行这个SELECT陈述 TIMEDIFF NOW posts date modified as time ago 并得到格式的结果02 58 32 最后一组数字 32 是秒数 我怎样才能省略秒 SELECT TIME FORMAT
  • iOS 的 Cordova healthkit 插件函数返回未定义?

    我正在尝试使用科尔多瓦插件健康我正在开发的phonegap应用程序的插件 每当我使用该应用程序时 每个插件都可以工作 但这个插件除外 我正在使用phonegap mac 应用程序在iPhone 6s 上进行测试 我已采取的步骤 安装的插件c
  • 仅在根进程上声明的数组

    特别是在 Fortran 的 MPI 中 仅在根进程上定义数组是否可能并且是一个不错的选择 例如这样的事情 program test implicit none include mpif h all mpi init ierr call m
  • 比较两个字符串并返回差异。 Python 3 [重复]

    这个问题在这里已经有答案了 我的目标是编写一个程序来比较两个字符串并显示前两个不匹配字符之间的差异 例子 str1 dog str2 doc 应该返回 gc 我知道我尝试使用的代码很糟糕 但我希望收到一些提示 这是我解决这个练习的糟糕尝试
  • C#性能分析-如何计算CPU周期?

    这是进行性能分析的有效方法吗 我想要获得纳秒精度并确定类型转换的性能 class PerformanceTest static double last 0 0 static List numericGenericData new List
  • 如何创建 html 输入文本区域,以便可以为某些单词添加下划线或设置其格式?

    我想要一个输入字段 我可以让javascript为输入字段的不同部分设置某些属性 一个简单的例子来演示我想做的事情 假设我想在输入文本区域中的所有咒语单词下划线 因此 当插入新字母时 JavaScript 将检查输入文本区域 并且对于与我的
  • RichtextBox 中的粗体

    我一直在研究我的富文本框 但遇到了一些奇怪的事情 我想将每一行的第一个单词加粗 使用此代码 RichTextBox bold richTextBox1 foreach string line in bold Lines string nam
  • 用于向下钻取图表的自己的后退按钮

    我有一个带有向下钻取数据的饼图 是否可以隐藏默认的后退按钮并从我自己的按钮触发后退功能 是的 这是可能的 只需创建您自己的按钮 然后单击调用chart drillUp 功能 看docs Highcharts v5 和 v6 在 Highch
  • AWS RDS 是否支持 MySQL 作为文档存储

    我能够连接普通的AWS RDS MySQL实例 5 7 16 但是 由于我必须使用 MySQL 作为文档存储 因此我通过安装 mysqlx 插件配置了 MySQL 实例 这是文档存储所需的 此后 我尝试连接同一实例上端口 33060 上的
  • YouTube 嵌入视频开始/停止事件

    我想知道 通过 iframe 嵌入 YouTube 视频是否会暴露某些事件 例如 onStart 或 onStop 您可以在其中指定一些回调 这是处理启动和停止事件的示例 HTML 文件 index html
  • 如何在 Spring Boot 中将 Json 字节数组转换为 AMQP?

    按照此 我有这个代码 Bean open fun messageConverter om ObjectMapper MessageConverter return Jackson2JsonMessageConverter om Bean o
  • 在 PySpark 2.0 中读取序列文件

    我有一个序列文件 其值如下所示 string value json value 我不关心字符串值 在 Scala 中我可以通过以下方式读取文件 val reader sc sequenceFile String String path va
  • 如何使用 PyGame 计时器事件?如何使用计时器向 pygame 屏幕添加时钟?

    我是 python 新手 因此决定尝试制作一个简单的游戏pygame 我想添加一个计时器 时钟来显示 你已经玩了 生存了多长时间 所以基本上创建了一个时钟 然而 我四处搜寻并得到了time sleep 1 它确实可以作为时钟使用 但它会减慢
  • 将多个 Intent 从单个 Activity 发送到另一个 Activity

    我对 android 很陌生 我正在尝试将用户输入的数据 他们的名字 发送到另一个活动 我过去能够使用意图在活动之间发送单行 但我无法弄清楚如何将两个不同的字符串发送到两个不同的 TextView 这是到目前为止我的 MainActivit
  • 使用 jQuery 解析 JSON

    我正在尝试使用 jQuery 解析以下 JSON 并获取每个 id 值 有人可以建议吗 id 1 name Boat id 2 name Cable 到目前为止我有 each test function i item alert item
  • 在 R 中查找数组中最接近元素的最快方法

    我想找到 R 中最快的方法来识别 Ytimes 数组中最接近给定 Xtimes 值的元素索引 到目前为止 我一直在使用一个简单的 for 循环 但必须有更好的方法来做到这一点 Xtimes lt c 1 5 8 10 15 19 23 34
  • Swift / 如何使用 popViewController 调用委托

    我读过了这个线程 以及类似的其他 从下到上 但它根本不符合我的需求 我有一个UIViewController inside UIPageViewController在一个UINavigationController 导航到第二个 ViewC
  • C# 事件去抖

    我正在监听硬件事件消息 但我需要对其进行反跳以避免太多查询 这是一个发送机器状态的硬件事件 我必须将其存储在数据库中以用于统计目的 有时它的状态会经常变化 闪烁 在这种情况下 我只想存储 稳定 状态 并且我想通过在将状态存储到数据库之前简单
  • Base64 编码的图像未在 Gmail 中显示

    我有一封嵌入的 HTML 电子邮件 其中我使用base64编码图像 通过 Chrome 访问时 图像不会在 Gmail 中显示 但当通过邮件客户端 Mac 上的邮件应用程序 访问相同的邮件时 它工作正常 我已正确设置标题 任何想法 My c
  • 如何从 WCF 中的客户端消息检查器获取标头值

    我正在为我正在处理的某些服务创建一个 Web 测试客户端 作为其要求的一部分 我希望能够显示完整的请求和响应 SOAP 消息 以及向用户显示的 HTTP 标头 我实现了一个 MessageInspector 类实现IClient消息检查器