2014-10-02 2 views
0

저는 wcf (gigs)의 큰 데이터로 작업하고 있습니다. 이 코드를 클라이언트에 반환해야하며 이전 코드는 메모리 스트림을 작성한 다음 스트리밍 된 데이터 계약의 속성으로 클라이언트에 반환했습니다.WCF 및 대용량 데이터 스트리밍

문제는 데이터가 커지고 메모리 스트림이 모든 사용 가능한 메모리를 사용하며 모든 데이터가 스트림에 기록되기 전에 결국 실패한다는 것입니다.

요청시 스트림에 데이터를 쓸 수 있으므로 서버가 클라이언트가 요청할 때 서버에서 쓰고 있습니까?

+0

아직 시도한 것을 Google에 보여주세요. –

답변

0

다음은 Google 코드입니다.

internal StreamedFileResponse CreateStream() 
{ 
    var stream = new MemoryStream(); 

    using (var writer = new CsvWriter(stream, Encoding.UTF8)) 
    { 
     writer.Write(rowFactory.CreateHeader()); 

     foreach (var source in sources) 
     { 
      var row = rowFactory.Create(source); 
      if (row != null) 
      { 
       writer.Write(row); 
      } 
     } 
    } 

    stream.Seek(0, SeekOrigin.Begin); 

    return new StreamedFileResponse { Data = stream, Length = stream.Length }; 
} 

[MessageContract(WrapperNamespace = "http://www.contoso.com/services/contract/reports/streamed")] 
public class StreamedFileResponse : IDisposable 
{ 
    [MessageBodyMember] 
    public Stream Data { get; set; } 

    [MessageHeader(MustUnderstand = true)] 
    public long Length { get; set; } 

    public void Dispose() 
    { 
     Data.Dispose(); 
    }  
}