私は最近、カスタムエンコーダ(バイナリエンコーダを使用して実際のエンコードを行い、Gzip圧縮器を使用してバイト配列を圧縮する)を接続しました。それはうまく動作します。問題は、実際にバイト配列を膨張させる小さいメッセージサイズの問題です。私はこれを回避する方法があるかどうかを知りたい。具体的には、条件の圧縮と解凍を適用する方法がある場合です。条件wcf条件付き圧縮
if(buffer.Count <= 5000)
skip compression
を置くしかし、バイトが圧縮されていない場合は、他のエンド・解凍でも起こるでしょう上の問題がある -
私のような何かをしようとしました。私はこれが理にかなってほしい。
後圧縮と解凍は(CompactMessageEncoderからコードスニペット)
public override Message ReadMessage(ArraySegment<byte> buffer, BufferManager bufferManager, string contentType)
{
ArraySegment<byte> decompressedBuffer = DecompressBuffer(buffer, bufferManager);
LogWrite("Decompressed from {0} bytes to {1} bytes", buffer.Count, decompressedBuffer.Count);
Message returnMessage = _innerEncoder.ReadMessage(decompressedBuffer, bufferManager);
returnMessage.Properties.Encoder = this;
return returnMessage;
}
public override ArraySegment<byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset)
{
var buffer = _innerEncoder.WriteMessage(message, maxMessageSize, bufferManager, messageOffset);
var compressedBuffer = CompressBuffer(buffer, bufferManager, messageOffset);
LogWrite("Compressed from {0} bytes to {1} bytes", buffer.Count, compressedBuffer.Count);
return compressedBuffer;
}
圧縮されたメッセージにカストムヘッダを追加できますか? http:// stackoverflow。com/questions/964433 /カスタムヘッダーごとのwcfコールの追加方法 –
@Mitch:これは機能しない可能性があります。私は、メッセージクラスにカスタムヘッダを追加し、それをWriteMessage()関数で圧縮すると言います。 ReadMessage()では、Messageクラスを取得してヘッダーを読み取る前に、そのメッセージを解凍する必要があります。 – stackoverflowuser