最近在网上看了一个帖子: 主题: 客户端用delphi写,服务器端用java写,这样的模式是否可行呢?
其中用户 greateWei 的思路 提醒了我:使用 XML_RPC的方式 进行不同语言的交互。以前在某软件公司做过 JAVA => XML => HTTP = >XML => DELPHI 的 系统,没有使用其他的技术,仅使用了 IDHTTP组件来获取XML。唯一的感觉就是构造过程比较麻烦,特别是构造 XML 时。现在用于有个组件了XML-RPC。
系统架构实现基于几点考虑:
1、XML-RPC同SOAP比较:由于Delphi SOAP客户端存在一些性能问题和同Java实现存在一些兼容性问题,因此考虑采用XML-RPC实现,而且XML-RPC实现同SOAP实现相比较,性能要好很多;
2、XML-RPC同SOCKET比较:采用HTTP协议可以有效穿透不同网络防火墙;
3、采用XML格式交换数据,而不采用XML-RPC标准格式交换数据,主要是由于XML-RPC格式比较简单,复杂的数据格式很难满足需求,直接使用对象XML数据流方式,有利于系统扩展;
今天小试了Apache XML-RPC:http://ws.apache.org/xmlrpc/,与 Delphi XML-RPC:http://sourceforge.net/projects/delphixml-rpc/ ,使用 Apache的 在 服务器 使用,而 Delphi 地作为客户端使用。发现了一个问题:使用 Delphi XML-RPC库时,不不支持中文。
通过GOOGLE 各种 信息,和 察看 Delphi XML-RPC库 的源代码,发现 其中的XML解析单元 LibXmlParser.pas 不支持 亚洲 字符集。于是产生了修改 XML解析单元 LibXmlParser.pas 的念头。
最后发现 问题出现在这几句:
CurContent := CurContent + CHR (StrToIntDef ('$'+Copy (Name, 3, MaxInt), 32))
和 CurContent := CurContent + CHR (StrToIntDef (Copy (Name, 2, MaxInt), 32));
当 存在多字节字符 时,使用 CHR 就有问题。是用 WideChar 即可解决问题。
本文介绍了在Delphi中使用XML-RPC库与Java服务器交互时遇到的中文支持问题。作者比较了XML-RPC与SOAP和SOCKET的优缺点,并选择XML-RPC以提高性能和穿透防火墙的能力。在尝试Apache XML-RPC和Delphi XML-RPC库时,发现Delphi库不支持中文。通过分析源代码,作者发现LibXmlParser.pas单元的字符处理问题,并提出使用WideChar解决多字节字符的方案。
2378

被折叠的 条评论
为什么被折叠?



