此消息不支持该操作,因为它已被复制

时间:2012-03-01 15:29:04

标签: .net wcf

您好,

我在WCF中收到以下异常:此消息不支持该操作,因为它已被复制。

我正在使用CustomMessageInspector,这就是Im处理传入消息的方式:

private long DetermineAndLogMessageDiagnostics(Message message)
{
    MessageBuffer buffer;
    Message bufferMessage;

    if (!message.IsFault && !message.IsEmpty)
    {
        buffer = message.CreateBufferedCopy(Int32.MaxValue);
        bufferMessage = buffer.CreateMessage();

        var messageBodyReader = bufferMessage.GetReaderAtBodyContents();
        var messageBody = messageBodyReader.ReadOuterXml();

        double bodySizeInBytes = Encoding.UTF8.GetByteCount(messageBody);

        return long.Parse(Math.Ceiling(bodySizeInBytes / 1024).ToString());
    }
    return 0;  
} 

根据MSDN页面,这是这样做的方法(CreateBufferedCopy)我仍然得到异常。如果我评论这个方法一切正常吗?

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

这是因为消息的生命周期仅持续一次使用。一旦查看了邮件内容或将内容复制到某处,就无法再次阅读该邮件。

private long DetermineAndLogMessageDiagnostics(Message message)
{
   buffer = message.CreateBufferedCopy(Int32.MaxValue);

   // Do something with the copied message

   reply = buffer.CreateMessage();
   buffer.Close();
}