当构建WCF客户端以生成并发送SOAP消息时,我想在通过网络发送之前将整个消息的快照记录到包括所有标头信息到我的数据库。看起来像Message Encoder Classes我在其WriteMessage方法中有一条消息快照。我不太了解WCF框架架构师,所以我不确定如何将变量传递给自定义编码器?基本上我想传入我的数据库的sql rowkey,这样我们就可以记录与特定sql行记录相关的这条消息的快照。谢谢!
答案 0 :(得分:1)
基本上,您必须创建一个实现IDispatchMessageInspector接口的类。
此界面有两种方法:
AfterReceiveRequest - 在您收到消息请求时点击
BeforeSendReply - 在您发送回复时点击
您可以同时获取请求和回复,以便保存在数据库中。
您可以在邮件中添加标题,以便将此信息用作您要使用的“变量”。
以下是您可以遵循的示例: 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;
}
}