2014-10-02 157 views
0

我正在使用wcf(gigs)中的大数据。我需要将其返回给客户端,并且之前的代码编写了一个内存流,然后将其作为流式数据协定中的一个属性返回给客户端。WCF和流式传输大数据

问题是数据已经增长,现在内存流使用所有可用内存,并最终在所有数据写入流之前失败。

是否有可能将数据写入流按需,所以服务器正在写它是客户端请求它?

+0

告诉我们你已经试过了吗 – 2014-10-03 09:38:18

回答

0

这是我们的代码;

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(); 
    }  
}