簡體   English   中英

WCF-來自打開的SqlDataReader的流

[英]WCF - Stream from open SqlDataReader

在我的服務中,我有一個很大的SQL結果集,我想流式傳輸。 不久前,在其他地方也提出了完全相同的問題,但沒有任何答復。 因此,我可以自由地引用它:

在服務中,我正在使用SqlDataReader讀取所有數據,並將數據寫到返回流中,然后返回該流。 上述解決方案的問題在於該服務將整個結果集讀取到流中,然后返回該流。

我想做的是將SqlDataReader使用的基礎流返回給客戶端,或者在sqldatareader仍將數據注入服務內的同時將流返回給客戶端。 我想要的行為與從WCF服務返回FileStream時獲得的行為相似。 在客戶端上,無論文件大小如何,您都可以立即開始訪問文件中的行。

可以想象,在我的服務中緩沖整個結果會導致內存不足異常。

為了澄清起見:我沒有試圖返回SqlDataReader ,而是將行序列化為這樣的Stream:

Public Shared Function DataReaderToExcelXml(ByRef dr As SqlDataReader) As Stream
    Dim ms As New MemoryStream
    Dim tw As New IO.StreamWriter(ms)

    For Each row As DbDataRecord In dr
            'Embed row in ExcelXml, detailed function omitted
            tw.write(row.toString()) 'row.toString is just a simplification
    End While

    tw.Flush()
    dr.Close()
    ms.Seek(0, SeekOrigin.Begin)

    Return ms
End Function

在WCF中檢查有關流式傳輸大數據的資源: https : //msdn.microsoft.com/zh-cn/library/ms733742%28v=vs.110%29.aspx

以及更詳細的流式傳輸示例: https : //msdn.microsoft.com/en-us/library/ms751463%28v=vs.110%29.aspx

最好的解決方案可能是將請求/獲取分解成較小的塊。 但是,如果您不能這樣做,則可以構建流式解決方案。 該文檔提供了一些示例和要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM