如何将大量数据传递给Web服务

时间:2009-06-24 20:38:13

标签: c# asp.net web-services client-server

我正在构建一个客户端 - 服务器(c#)应用程序,它使用Web服务来同步数据。

基本上我来回传递DataSet的XML。但是根据各种参数,数据集实际上可能非常大。我正在使用Gzip压缩XML,并希望将其传递给Web服务器并获取生成的压缩XML。

来回传递潜在大块数据的最佳方法是什么?

澄清:我想我问的是哪种格式最适合传递数据。 JSON,SOAP,普通POST(我对Web服务不太熟悉,所以我确信还有更多我不想的)。

6 个答案:

答案 0 :(得分:4)

最好可能取决于很多因素。如果最好的话,你的意思是最有效的,这里有一些要考虑的要点:

  • XML不是最好的方式
  • 二进制序列化效率更高。
  • 但是,如果您需要关注互操作性,则可能没有此选项。在这种情况下,您可能需要考虑使用平面文件或分隔格式。
  • 如果这些都不可行,那么您可以考虑发送已更改的内容而不是所有数据。
  • 如果这不是一个选项,那么压缩XML就是一个......好的解决方案。

我使用XML作为最后的手段,因为XML中包含了许多不必要的元数据,这些元数据很容易将有效负载的大小增加5倍以上。

答案 1 :(得分:1)

您可能想要调查的是使用MTOM。这允许您以分块方式发送二进制SOAP。这很酷,因为通过分块数据和AJAX UI,您可以向正在上传它的用户显示进度条。

Here是使用MTOM以分块方式发送/接收数据的示例。我希望这会有所帮助。

答案 2 :(得分:0)

如果您使用WCF作为Web服务,则可以使用MTOM作为二进制附件发送数据。参见:

What is the best way to send large data from WCF service to Client?

答案 3 :(得分:0)

您可以尝试压缩文件并通过webservice将其作为二进制文件发送。另外,不要忘记修改上传限制。

如何通过webservice发送二进制数据:http://support.microsoft.com/kb/318425

答案 4 :(得分:0)

如果您只想将gzip压缩应用于xml数据,您可以考虑在http传输级别启用透明gzip压缩(Accept-encoding:gzip,Content-Encoding:gzip)并让iis处理它。 /> 见http://weblogs.asp.net/owscott/archive/2004/01/12/IIS-Compression-in-IIS6.0.aspx#58745

答案 5 :(得分:0)

对于Web服务,您可以考虑多种概念和可能性。

您是否需要多个客户端管理相同的数据集?同时?

您是否有一个断开连接的设置,它在两端管理或只管理其他视图/存储/报告?

您是否只是使用客户端作为数据集的接口,如果是这样,使用不同的UI(Web)作为基于Web UI的应用程序独立管理数据集的不同部分是否有意义?

您是否在事务类型交互中进行了增量更改? (一端将大数据集发送到客户端,并根据该返回事务更改?)

如果不考虑是否/如何剖析数据集以获得更优化的管理或了解更多具体细节,则难以特别推荐。

如果您必须发送大型数据实体,那么您只需要将哪种方法用于管道,简单地上传/下载并适当地管理端点。

对于一些随意的想法:

如果你想操纵DOM中的数据,可以考虑JSON,它与JavaScript完全兼容。

如果您需要XML数据集操作,如果需要传递整个数据集,可以放置zip或其他压缩,只需将其连接到每一端。