2011-02-24 101 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)); 
}