前面深入介绍了WSDL文件结构,相信读者已经对WSDL有了初步认识。事实上很多PHP可视化编程工具已经提供了全面的WSDL支持,例如ZendStudio、Eclipse PDT等。使用可视化工具创建WSDL不仅可以提高开发效率,还可以减少出错的几率。接下来将以ZendStudio 8.0为例,详细介绍在IDE环境中创建WSDL的全过程。图12-6 WSDL文件属性最后只需要单击“完成”按钮,即可创建一个WSDL文件。现在的WSDL文件只有骨架,并没有消息体。......
2023-11-04
在PHP中,SOAP扩展模块只能解释WSDL文件,这也是W3C所规范的文件类型。事实上WSDL并非唯一的SOAP文档模型,在其他平台中出于商业需要,各厂商会进行相应的功能定制,文件名称也不尽相同,例如ASP.NET平台就叫ASMX。
但不管怎样叫法,由于WSDL遵循国际化规范,所以在这些平台上使用WSDL是完全通用的。WSDL由definitions、types、message、binding、service等节点组成,分别代表不同的描述信息,如下所示。
➢types(消息类型):可选,数据类型定义的容器,它使用某种类型系统(如XSD)。
➢message(消息):必选,通信数据的抽象类型化定义,它由一个或者多个part组成。
➢part:必选,消息参数。
➢operation(操作):必选,对服务所支持的操作进行抽象描述。
➢port Type(端口类型):必选,特定端口类型的具体协议和数据格式规范。
➢binding(通信类型绑定):必选,描述通信的类型,例如SOAP。
➢service(服务描述):必选,相关端口的集合,包括其关联的接口、操作、消息等。
➢port(服务列表):必选,定义为绑定和网络地址组合的单个端点。
其中operation操作分为4种类型,分别为one-way(单向)、request-response(异步请求异步返回)、solicit-response(要求应答)、notification(通知)。WSDL最外层元素是definitions,在该元素下定义其他节点描述信息。如图12-3所示。
图12-3 WSDL文档模型
如图12-3所示,这些节点描述信息并非全是必选的,下面将通过一个示例代码,简单演示SOAP的应用。假设使用http://c1.localhost作为Web Service服务端,使用http://c2.localhost作为客户端,那么在服务端中需要创建消息实体类。首先创建绑定接口文件,并命名为api.php,代码如下。
(www.chuimin.cn)
对应的Data.class.php文件为消息类体文件,代码如下所示。
上述代码功能很简单,只需要根据客户端提交的邮政编码,返回相应的城市。在实际应用开发中,这些数据可以直接在数据库中获取。前面在api.php文件中已经将api.wsdl绑定为消息类体描述文件,所以需要在同级目录下创建api.wsdl文件,代码如下。
如上述代码所示,types节点定义了消息的数据类型(上传及返回)。PHP目前只支持string、int、float等常见数据类型。这里的数据类型与PHP中的数据类型不是一个概念,而是W3C定义的数据类型。也就是说在此定义的数据类型无论在哪种语言或技术中,都能够转换为该语言对应的数据类型。对于PHP而言,由于PHP对数据类型不敏感,所以意义不大(例如可以使用string代替int)。
至此,一个简单的SOAP服务端就创建完成了。接下来在http://c2.localhost网站中创建客户端,代码如下所示。
运行结果为“广州市”。可以看到,在客户端中并不是调用api.php文件,而是调用api.wsdl文件。api.wsdl文件是一个XML格式的数据描述文件,并没有脚本处理能力。但由于将其与api.php文件绑定,所以api.wsdl文件就拥有了api.php所拥有的功能了,在使用时与在本地直接调用api.php文件保持一致,这就是分布式开发的典型应用。
需要注意的是,由于PHP对数据类型不敏感,所以对调用的结果并不会进行强类型检测,这往往会造成严重问题。
例如在WSDL中定义了array类型数据,在调用时PHP可以使用array类型传参数给远程接口。但使用其他语言时(例如C#、Java)将会造成严重的错误。这是因为PHP对WSDL的支持是严格按照W3C规范所设计的,而该规范中并未将数组类型作为SOAP标准数据类型(需要额外引入另外一组命名空间)。
所以强制将节点中的string改为array时,PHP能正常识别为数组类型,但其他强类型语言则不能识别。解决办法是尽量使用W3C规范的标准数据类型,例如可以将数组序列化为Json,然后以字符串的形式传参。
接下来将对WSDL中重要的节点元素进行讲解。理解这些节点的作用及意义,是掌握SOAP应用开发的前提。首先从definitions元素开始介绍。
有关PHP MVC开发实战的文章
前面深入介绍了WSDL文件结构,相信读者已经对WSDL有了初步认识。事实上很多PHP可视化编程工具已经提供了全面的WSDL支持,例如ZendStudio、Eclipse PDT等。使用可视化工具创建WSDL不仅可以提高开发效率,还可以减少出错的几率。接下来将以ZendStudio 8.0为例,详细介绍在IDE环境中创建WSDL的全过程。图12-6 WSDL文件属性最后只需要单击“完成”按钮,即可创建一个WSDL文件。现在的WSDL文件只有骨架,并没有消息体。......
2023-11-04
在PHP开发中,下载文件可以使用curl、fsockopen、file_get_contents等函数。PHP内置了file_get_contents函数,该函数是PHP程序员常用于下载文件的函数,但file_get_contents并不提供文件本地化保存功能,需要开发人员手动处理。download能够对常见的TXT、HTML、XML、图片等文件提供下载功能,也能够对压缩包、二进制文件等提供下载功能。图11-2 download方法下载文件效果......
2023-11-04
TortoiseSVN是免费开源的,同样能够运行在Windows及Linux等主流操作系统上,接下来将详细讲解在Windows操作系统上安装TortoiseSVN。要安装TortoiseSVN,首先需要下载相应的安装包,下载网址为http://tortoisesvn.net/downloads.html。TortoiseSVN的安装非常容易,一直点击“Next”按钮直至完成即可。安装完成后在桌面空白的区域单击鼠标右键,如出现图1-25所示菜单,即表明TortoiseSVN安装成功了。......
2023-11-04
nusoap是一套第三方开源类库,用于创建及调用SOAP服务。nusoap非常灵活及强大,不仅支持常用的SOAP服务调用,而且还支持动态生成WSDL,支持使用数组作为消息参数类型。此外nusoap套件还支持多种客户端与服务端连接方式,例如代理连接,SSL安全连接等。使用nusoap开发SOAP服务,不仅可以有效提高开发效率,而且由于代码全部基于PHP,开发员不需要面对复杂难记的WSDL标记,只需要掌握PHP面向对象开发即可。接下来将结合示例代码,详细介绍nusoap的使用。......
2023-11-04
ThinkPHP创建网站时使用UTF8编码,包括数据库操作默认情况下也使用与文件系统相同的编码。事实上PHP已经内置了iconv函数用于处理字符编码,但只能处理字符串。其中参数filename表示需要转码的有效文件;参数out_charset表示转换后的编码,接受的输出编码与iconv函数一样。......
2023-11-04
SOA组件之间进行通信时,使用SOAP协议进行传递。此外,SOAP不仅支持HTTP还支持SMTP、MIME等多种成熟的网络传输协议,也就是说使用SOAP协议可以代替HTTP、SMTP等受支持的协议。图12-1 SOAP通信过程如图12-1所示,读者也许会感觉到整个流程与普通的XML通信过程并无区别,事实上Web Service整个开发框架核心在SOAP协议。但要是在支持SOAP访问协议的容器中访问WSDL文件时,将会得到SOAP服务,并能够发现被注册的公开服务。......
2023-11-04
Zend Studio在6.0之前采用独立安装包进行发行。下面分别对经典的Zend Studio 5.5和成熟的Zend Studio 8.0进行讲解,方便读者选择。Zend Studio 8.0是Zend推出的商业套件,开发者或企业必须要购买商业许可才能进行使用。......
2023-11-04
完成上述步骤后,就可以进行安装HTTPSQS了。最后只需要启动HTTPSQS服务进程即可。因为HTTPSQS队列为空,所以返回结果为HTTPSQS_ERROR。检查HTTPSQS是否已经成功运行,可以查看是否存在主进程,如以下代码所示。......
2023-11-04
相关推荐