WS的WS

2002年6月,当我完成李维的《C++Builder 6 Soap/Web Service开发》一书的技术编辑工作后,应邀为这本书写了一个序,其中提到:

技术的发展永远是和现实需要相配套的。我们需要用一种新的概念和技术来解决当今极为分布的环境下,各应用之间互相集成的问题。幸运的是,这样的概念和技术已经出现了,它就是SOAP(Simple Object Access Protocol,暂译为“简化对象存取的协议 ”)和Web Service。

如今,创建一个Web Service已经是非常简单的工作了。在Visual Studio下,Web Service是一个现成的模板;几乎所有流行的脚本语言(PHP, Python, RoR, JavaScript)也都能支持对WS的调用。似乎所有的障碍和藩篱都已经撤除,我们可以顺利的进入WS的世界。

但是就在今天,当我和令狐兄就有关RPI系统的开发进行初步探索时,我的梦想却被无情的打破了。

令狐在他的BLOG里(链接:在此)写到:

查了一下资料说Encoded是SOAP规范里规定的编码方式,而另一种Literal则是使用SDL描述里定义的编码方式。但.NET默认的是后者。而很多客户端能识别的是前者(我查了,至少Python和Java的调用都需要修改这个编码方式)。不知道这是不是就是传说中的.NET的Web Service编码问题。但奇怪的是PHP的默认编码也是Literal,难道PHP和.NET关系这么好?

显然,对于一个“初级”开发者而言,牵涉到在VS中进行类似:[SoapDocumentService(Use= System.Web.Services.Description.SoapBindingUse.Encoded)]这样的设置确实有点太 “magic”了。

如此设置后,令狐用Python调用我在VS下开发的WS已经没有任何问题了。但是,我再次用PHP调用这个WS却出现了如令狐原来碰到的问题:当使用 Literal方式编码时,Python无法传递参数给WS的方法;而当使用Encoded方式编码时,PHP无法传递参数给WS的方法!

(你可以怀疑我的PHP功力,但是请你相信,我已经尝试了很多方法来修改我的PHP代码了。)

曾经我以为,有了WS,程序开发语言已经不是一个最大的问题。但是,我猜到了开头,却没有猜到结尾。

就如同HTML/CSS/XTHML一样,变种(mutant)的存在给原本简单的事情凭空增加了复杂度。而这一复杂化过程居然出现在Simple Object Access Protocol上,我只能怀疑Simple是不是用错了地方。

当然,在我们这个case中,我依然可以用Encoded方式编写WS,而让令狐兄用Python在另一端调用。而我,可以选择在当地用ASPX调试,或者干脆新学习一下Python。但这不是问题的关键,而且我也没有发言权。

打住。

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *