我实现了一个自定义消息检查器(通过 IDispatchMessageInspector)来拦截在 WCF 服务的服务器端接收到的消息,因此我可以尝试反序列化消息并应用一些特定的业务逻辑。我遇到的问题是,当我将 MessageBuffer 的内容写入新的 MemoryStream 然后尝试反序列化时,我收到一条错误消息,提示“根级别的数据无效。第 1 行,第 1 行。” 我确实知道传入的数据是有效的,因为跳过检查器会使一切正常。
示例代码:
public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)
{
MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue);
request = buffer.CreateMessage();
string msg = buffer.CreateMessage().ToString();
var dc = new DataContractSerializer(typeof(Adder));
using (var stream = new MemoryStream())
{
buffer.WriteMessage(stream);
stream.Position = 0;
//deserializing error occurs here
var c = dc.ReadObject(stream);
}
return null;
}
这是 Adder 类/接口:
[DataContract(Name = "adder", Namespace = "http://test.com")]
public class Adder
{
[DataMember(Name = "first")]
public int First { get; set; }
[DataMember(Name = "second")]
public int Second { get; set; }
}
[ServiceContract(Namespace = "http://test.com")]
public interface ITestSvc
{
[OperationContract(Name = "add")]
int Add(Adder adder);
}
有什么建议或有更好的选择吗?我的主要目标是读取进入我服务的每个 WCF 请求的 XML(在反序列化对象中)。