2012-10-29 33 views
0

我需要使用webservice發送大量數據。數據的大小將在300 MB到700 MB之間。 Web服務從SQL數據庫生成數據併發送給客戶端。它以DataSet的形式提供大約20到25個表格。 我試着解決方案,"How to: Enable a Web Service to Send and Receive Large Amounts of Data"和微軟WSE 3.0樣本,但主要是它給我「System.OutOfMemoryException」。使用webservice發送大量數據

我認爲問題是WebService緩衝服務器上的內存中的數據,它跨越限制。

我認爲兩個交替, (1)由一個發送數據表之一,但一段時間一個數據表可以具有圍繞100MB至150MB數據 (2)使用的HttpWebRequest寫在服務器和傳輸文件(FTP可能的,但FTP服務器目前無法訪問)

任何一個可以提出解決這個問題使用webservice的解決方法?

謝謝,

+0

您是否嘗試了Web服務的BufferResponse屬性。 –

+0

這裏是一個鏈接http://msdn.microsoft.com/en-us/library/byxd99hx%28v=vs.80%29.aspx#vbtskusingwebmethodattributeanchorbufferresponse –

+0

是的,微軟WSE 3.0的示例代碼有[WebMethod(BufferResponse = false )]。但它仍然給OutOfMemory異常 – par

回答

0

數據集將加載內存中的所有數據。它不適合傳輸大量的數據。數據集在序列化時會攜帶大量額外的信息。

如果您知道需要傳輸的表的結構,請創建一組Serializable對象併發送這些對象的數組將有助於顯着減少數據負載。

如果您必須使用DataSet,請查看啓用BinaryRemoting。

BinaryFormatter bf = new BinaryFormatter(); 
myDataSet.RemotingFormat = SerializationFormat.Binary; 
bf.Serialize(s, ResultDataSet); 

通過這種方式減少數據負載後,最好將文件寫入到http服務器的可公開訪問的位置。通過http託管它可以讓客戶端比ftp更容易下載文件。您可以通過給予用戶適當的權限來控制對這些http文件夾的訪問。

+0

我想使用DataReader轉換它,但我沒有找到任何方式來傳遞數據,而不使用webservice緩衝。是的,最後一種方式是創建文件並使用Http。 – par