2012-10-29 30 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