2014-11-13 2 views
2

WCF와 함께 gzipped 스트림을 보내려고합니다. 여기스트림을 gzip으로 WCF로 보냅니다.

코드 서버 측 :

static void Main(string[] args) 
    { 
     var baseAddress = new Uri("http://localhost:2016/TransferServer"); 
     var host = new ServiceHost(typeof(TransferServer), baseAddress); 
     var binding = new BasicHttpBinding 
     { 
      TransferMode = TransferMode.Streamed, 
      MaxReceivedMessageSize = long.MaxValue, 
      MaxBufferSize = 65535, 
     }; 
     host.AddServiceEndpoint(typeof(ITransferServer), binding, baseAddress); 
     var smb = new ServiceMetadataBehavior(); 
     smb.HttpGetEnabled = true; 
     host.Description.Behaviors.Add(smb); 
     host.Description.Behaviors.Find<ServiceDebugBehavior>().IncludeExceptionDetailInFaults = true; 

     host.Open(); 

     Console.Read(); 
    } 

TransferServer 클래스 :

public class TransferServer : ITransferServer 
{ 
    public void Transfer(Stream stream) 
    { 
     using (var gz = new GZipStream(stream, CompressionMode.Decompress)) 
     using (var fs = new FileStream("test.bin", FileMode.Create)) 
     { 
      gz.CopyTo(fs); 
     } 
    } 
} 

클라이언트 측 : 압축

public void SendStream(Stream stream) 
    { 
     var client = new TransferServerClient(
      new BasicHttpBinding {MaxReceivedMessageSize = long.MaxValue, TransferMode = TransferMode.Streamed}, 
      new EndpointAddress(@"http://localhost:2016/TransferServer")); 
     client.Open(); 

     client.TransferDump(??? gzipped stream ???); 
    } 

GzipStream 다른 스트림으로 써야했다,하지만 난 그냥 이미 gzipped 스트림을 보내고 싶습니다.

감사

답변

0

당신은 당신의 자신의 스트림이 .NET "스트림"에서 파생

public override int Read(byte[] buffer, int offset, int count) 
    { 
     while (count > 0) 
     { 
      //Here you should utilize GZipStream 
      Array.Copy(gzipBuffer, position, buffer, offset, count); 
     } 

     return processedBytes; 
    } 
읽기 메서드를 구현 만들어야합니다