将变量传递给 WCF 自定义编码器?

Pass variable to WCF custom encoder?

在构建 WCF 客户端以生成和发送 SOAP 消息时,我想在通过网络发送之前记录整个消息的快照,包括所有 header 信息到我的数据库。看起来在 Message Encoder 类 我在其 WriteMessage 方法中有消息的快照。我不太了解 WCF 框架架构师,所以我不确定如何将变量传递到自定义编码器中?本质上,我想传入我的数据库的 sql rowkey,以便我们可以记录与特定 sql 行记录相关的此消息的快照。谢谢!

基本上您必须创建一个 class 来实现 IDispatchMessageInspector 接口。

该接口有两个方法:

AfterReceiveRequest - 收到消息请求时触发

BeforeSendReply - 当您发送回复时被点击

您可以获得请求和回复,因此您可以保存在您的数据库中。

并且您可以在消息中添加 header,这样您就可以将此信息用作您要使用的 "variable"。

这是您可以遵循的示例: http://www.primaryobjects.com/CMS/Article121

已更新 仅包括其他解决方案,使用自定义 MessageEncoder,这是一个示例:

 public class MyTextMessageEncoder : MessageEncoder
 {

        public override Message ReadMessage(Stream stream, int maxSizeOfHeaders, string contentType)
        {
            StreamReader sreader = new StreamReader(stream);
            string msg = sreader.ReadToEnd();

            stream.Seek(0, SeekOrigin.Begin);
            XmlReader reader = XmlReader.Create(stream);
            var message = Message.CreateMessage(reader, maxSizeOfHeaders, this.MessageVersion);
            // Here I add my MessageHeader
            var poweredBy = MessageHeader.CreateHeader(
                            "X-Powered-By", "", "MyApp");

            message.Headers.UnderstoodHeaders.Add(poweredBy);
            return message;
        }

 }