我正在构建一个客户端 - 服务器(c#)应用程序,它使用Web服务来同步数据。
基本上我来回传递DataSet的XML。但是根据各种参数,数据集实际上可能非常大。我正在使用Gzip压缩XML,并希望将其传递给Web服务器并获取生成的压缩XML。
来回传递潜在大块数据的最佳方法是什么?
澄清:我想我问的是哪种格式最适合传递数据。 JSON,SOAP,普通POST(我对Web服务不太熟悉,所以我确信还有更多我不想的)。
答案 0 :(得分:4)
最好可能取决于很多因素。如果最好的话,你的意思是最有效的,这里有一些要考虑的要点:
我使用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或其他压缩,只需将其连接到每一端。