[英]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.