2009-12-04 43 views
0

我有一个列表,我需要通过Web服务发送对象列表。该列表包含约37,000个对象。如果我将它序列化为XML,这将转换为大约125 MB的XML文件。.NET WebService发送大型XML文件

我认为默认情况下,Web服务通过序列化XML进行通信。这使我相信我实际上每次发送125MB文件。以二进制格式,这只会是大约5MB。有没有办法以二进制格式进行Web服务调用以避免大带宽冲击?

+1

您的来源和目的地功能是什么?可以结束gzip和ungzip吗? – hova 2009-12-04 21:18:37

+0

Webservice可能不是这里最好的解决方案,提供有关服务使用者的更多信息。 – 2009-12-04 21:27:29

+0

我正在处理一个顾问,该顾问需要以对象数组格式的数据:Object []。这可以防止我以任何方式压缩或更改数据。我可能会让他们改变它,但我只是想确保没有办法强制Web服务以二进制序列化。 – 2009-12-04 21:45:31

回答

2

您可以使用WCF为您的web服务?如果是这样的话:WCF支持streaming large data跨网线。

如果您有任何压缩服务器端的数据到ZIP或其他东西的5 MB的可能性,您肯定可以将它们传输到您的客户端。

您将有这样的事情作为你的WCF服务合同:

[ServiceContract(Namespace="http://yourservice.com/streaming/2009/12")] 
interface IYourStreamingService 
{ 
    [OperationContract] 
    Stream GetListOfObjects(int id); 
} 

可以定义任取或作为“流”回数据的方法,然后客户端可以打开流像FileStream或者MemoryStream,数据将通过数据块在数据块中进行流式传输,因此在将数据发送到客户端之前,您不需要分配内存中的全部数据。

Marc

1
  • 您可以序列化为二进制数组。
  • 然后将该数组转换为字符串。
  • 将该字符串放入一个结构中,并发送它。
  • 然后在另一边,将字节串数组转换回正常的字节数组。
  • 然后将其重新序列化到您需要的对象中。