Ich habe kürzlich einen benutzerdefinierten Encoder eingesteckt (verwendet Binär-Encoder, um die tatsächliche Codierung und Gzip-Komprimierer zu tun, um das Byte-Array zu komprimieren). Es funktioniert gut. Das Problem besteht jetzt für eine kleine Nachrichtengröße, die tatsächlich das Byte-Array aufbläst. Ich würde gerne wissen, ob es einen Weg gibt, dies zu vermeiden. Insbesondere, wenn es einen Weg gibt, kann ich Condition Compression und Dekompression anwenden.wcf bedingte Komprimierung
Ich habe versucht, wie etwas zu tun - legen Sie eine Bedingung
if(buffer.Count <= 5000)
skip compression
Aber das Problem ist auf das andere Ende Dekompression auch passieren wird, wenn die Bytes nicht komprimiert werden. Ich hoffe das macht Sinn.
Im Folgenden sind die Funktionen, bei denen die Komprimierung und Dekomprimierung geschieht (Code-Schnipsel aus 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;
}
könnten Sie einen custome Header zu den Nachrichten hinzufügen, die komprimiert wurden? http: // Stapelüberlauf.com/questions/964433/How-to-Add-a-Custom-Header-to-Every-WCF-Aufrufe –
@Mitch: Dies funktioniert möglicherweise nicht. Da ich hinzufügen muss Lets sagen, ich füge benutzerdefinierte Header der Message-Klasse und komprimieren sie in WriteMessage() -Funktion. In der ReadMessage() muss ich es dekomprimieren, bevor ich die Message-Klasse bekomme und den Header lese. – stackoverflowuser