将变量传递给 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;
}
}
在构建 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;
}
}