关于系统复杂性的一句箴言
?Web Service用了这么多年了,相信没有人会怀疑其跨平台性。无论是MS的WS还是J2EE的WS,自己和自己平台的交互一般都不会有什么配置问题。可是,当我们想要用一种平台去访问另一种平台的WS的时候,一个矛盾出现了,就是对WSML的解释存在差异性。 我做了一个例子,在VB中用MSSoap访问PHP Pear SOAP生成的WS,众所周知WSDL一般都不是人写的。 假设有一个发送短消息的函数 ??? PHP生成Web Service有三种主要的方法: 1 用自带的soap函数 function send($address,$content,$key) {?} $server = new SoapServer(null,array('urn' => "SmsSender")); 这种方法无法生成wsdl 2 用Pear的SOAP class SmsSender { $server = new SOAP_Server(); 该类库可以自动生成WSDL如下:
3 使用nusoap,不过由于最新版本有bug,所以我懒得用。 下面我们用VB调用上面的第二个WS Dim client On Error Resume Next Call client.MSSoapInit("http://host/sms/ws.php?wsdl","SmsSenderService","SmsSenderPort")
MSSoap居然返回错误: initialization failedWSDLPort:Port SmsSenderPort has no operations HRESULT=0x1: 函数不正确。 那是不是WSDL的确错误呢?我继续用PHP的Pear的SOAP客户端来调用这个WS $client = new SOAP_Client("http://host/sms/ws.php"); 我甚至没有指定WSDL,也能顺利的执行。 还有Axis的WS如果给.net调用,经常也会存在一些莫名奇妙的错误。 如果我用一种平台的工具生成WSDL,然后让另一种平台用这个WSDL反向生成代码,这种代码的可读性会大大下降。 问题的症结似乎在于WSDL的过度复杂和设计之初,没有考虑手写代码的便捷性和可行性,HTML就是一个完全可以手写的代码。 难道Web Servcie就和EJB一样,所谓的一次部署只是一个美丽的童话?各家厂商为了自己的利益,无法使得WSDL变得完全中立? 或者是否应该有一个第三方的工具,独立与任何语言的工具来定义WS,然后通过可定制的模板,自动生成各家语言的各种框架所需的配置文件?如果有的话,可能会火! 欢迎大家参与讨论,你的WS最佳实践是什么? ? 没想到这个问题引发了不少朋友的激烈讨论。首先我声明的是,我选用了REST的Web Service,因为我觉得它比SOAP在解决我遇到的这个问题上更方便,快捷。其次,我觉得这个问题比较搞的点在于,M$在测试MSSOAP的时候,并没有找几个PHP的WS来做测试。同样Pear SOAP在做测试的时候,也没有用MSSOAP来测试。每个厂商似乎都只要保证自己的平台能够顺利的联通就可以了。同样对于Axis,Xfire也存在这样的问题。就像Xhtml,CSS的很多标准,虽然好,但是每个浏览器也不是都完全支持所有的标准。 Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1799303 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |