我需要使用webservice发送大数据。数据大小介于300 MB到700 MB之间。 Web服务从SQL数据库生成数据并发送到客户端。它采用DataSet的形式,大约有20到25个表。 我尝试使用artical,"How to: Enable a Web Service to Send and Receive Large Amounts of Data"和Microsoft WSE 3.0的示例解决方案,但主要是它给了我“System.OutOfMemoryException”。
我认为问题是WebService缓冲服务器内存中的数据并且超过限制。
我认为两个候补, (1)逐个发送DataTable,但有时候一个DataTable可以有大约100MB到150MB的数据 (2)在服务器上写文件并使用HttpWebRequest传输(可能的FTP,但目前无法访问FTP服务器)任何人都可以使用webservice建议解决此问题的方法吗?
谢谢,
答案 0 :(得分:0)
数据集将加载内存中的所有数据。它不适合传输大量数据。 DataSets在序列化时会携带大量额外信息。
如果您知道需要传输的表的结构,请创建一组Serializable
个对象,并发送一组这些对象将有助于显着降低数据有效负载。
如果您必须使用DataSet
,请查看启用BinaryRemoting。
BinaryFormatter bf = new BinaryFormatter();
myDataSet.RemotingFormat = SerializationFormat.Binary;
bf.Serialize(s, ResultDataSet);
通过这种方式减少数据有效负载后,最好将文件写入http服务器上的公共可访问位置。通过http托管它允许客户端比ftp更容易下载文件。您可以通过授予用户的适当权限来控制对这些http文件夹的访问。