2014-10-02 161 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(); 
    }  
}