2009-07-07 117 views
3

我有一个“简单”任务。我有一个使用C#编写的Web服务的现有项目,该项目有一个将大量XML文件发送到客户端的方法。 (这是存储在服务器上的数据的备份文件,需要在其他地方发送。)此服务还设置了一些额外的认证/授权。 我有一个WIN32的现有Delphi 2007应用程序,它调用Web服务来提取XML数据以供进一步处理。这是一个遗留系统,无需.NET安装即可运行。 唯一的问题:XML文件是巨大的(至少5 MB),需要作为一个整体发送。由于系统要求,我不能把它分成多个部分。我不允许对C#或Delphi代码进行重大更改。 (我只能改变客户端和服务器上的方法调用。)我不允许花费超过8(工作)小时来提出更好的解决方案,否则事情将保持不变。通过SOAP发送二进制流

我想添加的修改是压缩XML数据(将其减少到大约100 KB),然后将其作为二进制流发送到客户端。然后,Delphi代码应该接受此传入流并再次解压缩XML数据。现在,对现有代码进行最小限度的更改,应如何完成? (是的,我过去曾写过原始的客户端和服务器,但从来不打算一次发送那么多的数据,不幸的是,从我手中接过来的开发人员有其他想法,做出了一些愚蠢的改变,做了更多的伤害,并且在我的钢管引导可以连接到他的背后之前离开公司,所以现在我需要修复一些东西。修复此Web服务与其他需要恢复的伤害相比,具有非常低的优先级。)


服务器代码基于传统的ASMX东西,客户端代码是Delphi SOAP导入的结果,并带有一些额外的修改。 XML是3000+用户的每日更新,这在当前的设计中恰好是巨大的。我们正在努力,但这需要时间。还有更重要的项目需要先解决,但正如我所说的,有很短的时间可以快速解决这个问题。

+0

您还没有说过是否使用WCF或传统的ASMX技术。 – 2009-07-07 13:46:52

+0

为什么不备份备份服务器文件的其余部分时XML文件?为什么要特别对待它?你*是*备份服务器,不是吗? – 2009-07-07 15:07:36

回答

4

这听起来像一个很好的候选人一个HttpHandler

我的好链接是我的工作电脑上(我来补充他们当我开始工作),但你可以看看,看看它是否将是一个很好适合。

- 编辑 -
这里是链接...

http://www.ddj.com/windows/184416694
http://visualstudiomagazine.com/articles/2006/08/01/create-dedicated-service-handlers.aspx?sc_lang=en&sc_mode=edit

+0

听起来不错,只要它很快实施。 :-)否则,我不会有时间进行修改。 (首先需要解决的问题太多了。) – 2009-07-07 11:59:28

+0

现在我需要的仅仅是客户端处理这个流的东西。 (并希望在Delphi/WIN32中很容易实现。) – 2009-07-08 07:56:31

1

什么是SOAP消息一个5MB的文件的问题?我写了一个运行在soap上的文档服务器,这个服务器对大文件没有问题。

如果大小对您来说是个问题,我只会压缩​​和解压缩xml数据。这可以通过许多(免费的)可用组件之一来轻松完成,用于压缩TStream后代。

0

如果你得到了这样的压缩,只是将每个字节转换为它的十六进制等价值,这只会使尺寸加倍,然后发送它。然后在另一端做相反的事情。或者我错过了什么?

0

我同意布拉德布鲁斯,HttpHandler会很快,使用GZIP或Deflate Compression与我可能是错误的......浏览器本地支持。您可以轻松地在基于文本的数据上获得便宜的CPU时间压缩。

System.IO.Compression.GZipStream GZipStream = new System.IO.Compression.GZipStream("Your XML Doc Stream",System.IO.Compression.CompressionMode.Compress) 
相关问题