2011-02-24 107 views
14

在将消息发送回客户端之前,有任何方法可以测试消息的大小吗?我想处理事物服务端的最大消息大小配额。WCF消息大小

+2

你能提供什么你正在尝试做的更多信息?一个消息检查器可能就足够了,但不知道正在使用哪个消息编码器,你将不知道确切的大小。在内存和CPU中,这也会非常昂贵,因为您会分配大量内存并将消息序列化两次。 – MattC 2015-10-08 20:16:38

回答

1

您可以编写自定义MessageEncoder,在服务端使用它,并在其WriteMessage方法中检查编码的消息大小。

按照this guide,并覆盖以这样的方式方法:

public override ArraySegment<byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset) 
{ 
    var result = this.text.WriteMessage(message, maxMessageSize, bufferManager, messageOffset); 

    // Encoded message check logic. 
    Console.WriteLine("Message sent. Length=" + result.Count); 

    return result; 
} 

public override void WriteMessage(Message message, Stream stream) 
{ 
    var position = stream.Position; 

    this.text.WriteMessage(message, stream); 

    // Encoded message check logic. 
    Console.WriteLine("Message sent. Length=" + (stream.Position - position)); 
}