WebService-php- 1(16)

最近看了挺多关于php中webservice的资料,感谢燕十八的分享,帮助了我构建服务端的过程。将学习笔记记录如下,其中包含燕十八的笔记。

WebService

1 快速了解WebService

通俗的说:按一定的XML格式,调用远程服务器的方法,且服务器按一定的格式返回XML内容.
"一定的格式"----SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协
议.
远程服务器 ---- 一般通过HTTP协议来传递消息
总结: WebServie == HTTP协议 + Soap格式的XML

例1:soap请求

  POST /WebServices/MobileCodeWS.asmx HTTP/1.1
  Host: webservice.webxml.com.cn
  Content-Type: text/xml; charset=utf-8
  Content-Length: 354
  SOAPAction: "http://WebXml.com.cn/getMobileCodeInfo"
  <?xml version="1.0" encoding="utf-8"?>
  <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"                  xmlns:soap="http://WebXml.com.cn/getMobileCodeInfo >

2 PHP客户端请求WebService

  修改PHP.ini
  extension=php_soap.dll 前的";"去掉.
  并重启apache
  PHP SoapClient类可以用来请求WebService

$soap = new soapClient(‘http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL‘);
print_r($soap->getMobileCodeInfo( array(‘mobileCode‘=>‘13**********‘) ) );
Array
(
[0] => getMobileCodeInfoResponse getMobileCodeInfo(getMobileCodeInfo $parameters)
[1] => getDatabaseInfoResponse getDatabaseInfo(getDatabaseInfo $parameters)
)
Array
(
[0] => struct getMobileCodeInfo {
string mobileCode;
string userID;
}
[1] => struct getMobileCodeInfoResponse {
string getMobileCodeInfoResult;
}
[2] => struct getDatabaseInfo {
}
[3] => struct getDatabaseInfoResponse {
ArrayOfString getDatabaseInfoResult;
}
[4] => struct ArrayOfString {

string string;
}

// 调用方法
print_r($soap->getMobileCodeInfo( array(‘mobileCode‘=>‘13426060134‘) ) );

返回结果

stdClass Object ( [getMobileCodeInfoResult] => 13*********:北京 北京 北京移动动感地带卡 )

3 搭建WebService服务器

wsdl是什么?
wsdl是WebService的规格说明书.

<?xml version =‘1.0‘ encoding =‘UTF-8‘ ?>
<definitions name=‘自定义名称[可选]‘
targetNamespace=‘命名空间[一般为URL]‘
xmlns:tns=‘命名空间[值同targetNamespace]‘
xmlns:soap=‘http://schemas.xmlsoap.org/wsdl/soap/‘
xmlns:xsd=‘http://www.w3.org/2001/XMLSchema‘
xmlns:soapenc=‘http://schemas.xmlsoap.org/soap/encoding/‘
xmlns:wsdl=‘http://schemas.xmlsoap.org/wsdl/‘
xmlns=‘http://schemas.xmlsoap.org/wsdl/‘>
<!--<types> 元素定义 web service 使用的数据类型,WSDL 使用 XML Schema 语法来定义数据类型,也可以自定义Schema不包含的类型-->
<types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="[值同上tns]">
</xsd:schema>
</types>
<!--
<message> 元素可定义每个消息的部件,以及相关联的数据类型.
-->
<message name=‘操作名Request‘>
<part name="term" type="xsd:string"/>
</message>
<message name=‘操作名Response‘>
<part name="value" type="xsd:string"/>
</message>
<!--
<portType> 元素是最重要的 WSDL 元素.它可描述一个 web service、可被执行的操作,以及相关的消息.
它告诉你去哪个WebService的连接点,扮演了一个控制者.
-->
<portType name=‘操作列表名‘>
<operation name=‘操作名‘>
<input message=‘tns:操作名Request‘/>
<output message=‘tns:操作名Response‘/>
</operation>
</portType>
<!--<binding> 元素为每个端口定义消息格式和协议细节-->
<binding name=‘WS下的频道名称‘ type=‘tns:频道下的操作列表‘>
<!--style:属性可取值 "rpc" 或 "document",ransport:属性定义了要使用的 SOAP 协议.在这个例子中我们使用 HTTP-->
<soap:binding style=‘rpc‘
transport=‘http://schemas.xmlsoap.org/soap/http‘/>
<!--operation 元素定义了每个端口提供的操作符,对于每个操作,相应的 SOAP 行为都需要被定义-->
<operation name=‘test‘>
<soap:operation soapAction=‘http://www.cwtservice.cn/newOperation/‘/>
<input>
<soap:body use=‘encoded‘ namespace=‘urn:xmethods-delayed-quotes‘
encodingStyle=‘http://schemas.xmlsoap.org/soap/encoding/‘/>
</input>
<output>
<soap:body use=‘encoded‘ namespace=‘urn:xmethods-delayed-quotes‘
encodingStyle=‘http://schemas.xmlsoap.org/soap/encoding/‘/>
</output>
</operation>
</binding>
<!--<service>包含一个或者多个port元素,每个port元素表示一个不同的Web服务-->
<service name=‘WebService名称[如weatherWS,shopWS]‘>
<port name=‘WS下的频道名称[如cartSoap,购物车服务]‘ binding=‘tns:[频道名,同左]‘>
<soap:address location=‘http://[webservice地址]‘/>
</port>
</service>
</definitions>
时间: 2024-11-10 00:50:23

WebService-php- 1(16)的相关文章

简述WebService的使用(二)

上集回顾 上一篇我简单的介绍了一下整个WebService建立和后端访问的过程,如果感兴趣可以看一看:简述WebService的使用(一) //如有不懂请留言,觉得有用请点赞 内容提要 这一篇主要介绍一下WebService的ajax前端访问,侧重点是“跨域访问”.有兴趣的继续看过来··· 至于跨域访问的概念,我就说一句,就是“网站A想访问域名不同的网站B”(具体概念可以上网查),这在网络安全上是不被赞成的,大部分大型网站也关闭这个访问,然而需求依然在. 网上有很多解决方案,比如Ifame,代理

HTML基础教程(16)——HTML颜色名--

页提供了被大多数浏览器支持的颜色名. 提示:仅有 16 种颜色名被 W3C 的 HTML 4.0 标准支持,它们是:aqua.black.blue.fuchsia.gray.green.lime.maroon.navy.olive.purple.red.silver.teal.white.yellow. 如果使用其它颜色的话,就应该使用十六进制的颜色值. 颜色名列表 单击一个颜色名或者 16 进制值,就可以查看与不同文字颜色搭配的背景颜色. 颜色名 十六进制颜色值 颜色 AliceBlue  #

HTML5移动开发之路(16)——神奇的拖放功能

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(16)--神奇的拖放功能 在智能手机发展飞速的现在拖放功能已经成为一种时尚,但是在我们的浏览器上是不是还缺少这种方便快捷的功能?在HTML5的新标准中就有关于拖放的标准,作为HTML5标准的一部分,任何元素都可以被拖放. 一.浏览器支持情况 Internet Explorer 9.Firefox.Opera 12.Chrome 以及 Safari 5 支持拖放. 注释:在 Safari 5.1.2 中不支持

算法导论读书笔记(16)

算法导论读书笔记(16) 目录 动态顺序统计 检索具有给定排序的元素 确定一个元素的秩 区间树 步骤1:基础数据结构 步骤2:附加信息 步骤3:维护信息 步骤4:设计新操作 动态顺序统计 之前介绍过 顺序统计 的概念.在一个无序的集合中,任意的顺序统计量都可以在 O ( n )时间内找到.而这里我们将介绍如何在 O ( lg n )时间内确定任意的顺序统计量. 下图显示的是一种支持快速顺序统计量操作的数据结构.一棵 顺序统计树 T 通过在红黑树的每个结点中存入附加信息而成.在一个结点 x 内,增

(16)观察者模式

 (16)观察者模式 定义:定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新. 类型:行为类模式 类图: 在软件系统中经常会有这样的需求:如果一个对象的状态发生改变,某些与它相关的对象也要随之做出相应的变化.比如,我们要设计一个右键菜单的功能,只要在软件的有效区域内点击鼠标右键,就会弹出一个菜单:再比如,我们要设计一个自动部署的功能,就像eclipse开发时,只要修改了文件,eclipse就会自动将修改的文件部署到服务器中.这两个功能有一个

解读ASP.NET 5 &amp; MVC6系列(16):自定义View视图文件查找逻辑

原文:解读ASP.NET 5 & MVC6系列(16):自定义View视图文件查找逻辑 之前MVC5和之前的版本中,我们要想对View文件的路径进行控制的话,则必须要对IViewEngine接口的FindPartialView或FindView方法进行重写,所有的视图引擎都继承于该IViewEngine接口,比如默认的RazorViewEngine.但新版本MVC6中,对视图文件的路径方式却不太一样了,目前有两种方式,一种是通过RazorViewEngine,另外一种是通过新特性IViewLoc

寻找自适应元素(16)-自动向下填充公式

寻找自适应元素(16)-自动向下填充公式 设计要点:excle.界面.自动调整 秀秀:还有一个功能特别强大. 阿金:什么? 秀秀:自动向下填充公式. 阿金:嗯,说实话,这个功能非常有用. 秀秀:你也知道? 阿金:当然!因为透视表也可以有这个功能!只要配合"导入外部数据"就行. 秀秀:但是,俺说的就没有那么多附加条件,只要在"工具"-"选项"-"编辑"里设置"扩展数据区域格式和公式"就OK啦. 阿金:啊,又算

优化数据页面(16)——表题尽量窄于表格

优化数据页面(16)--表题尽量窄于表格 设计要点:优化数据页面.界面设计.美化exce 秀秀:你不是"很"有研究么?难道就局限于"提炼"这一条? 阿金:唉,听你说模仿别人的就行,所以俺没有研究动力了. 秀秀:可别呀!你刚讽刺了俺们学文的,就没你事了?说说吧, 阿金:好吧.第二条就是表题要尽量窄于表格的大小. 秀秀:嗯.这有点儿道理,这样符合人们的视觉习惯. 阿金:噢?你又赞同俺的研究了? 秀秀:NO!因为这不是关于"文科"的,而是"视

Web 在线文件管理器学习笔记与总结(15)剪切文件夹 (16)删除文件夹

(15)剪切文件夹 ① 通过rename($oldname,$newname) 函数实现剪切文件夹的操作 ② 需要检测目标文件夹是否存在,如果存在还要检测目标目录中是否存在同名文件夹,如果不存在则剪切 dir.function.php 添加: //剪切文件夹 function cutFolder($src,$dst){ if(!file_exists($dst)){ return '目标目录不存在'; }else{ if(!is_dir($dst)){ return '不是目录'; }else{

(转载)你好,C++(16)用表达式表达我们的设计意图——4.1 用操作符对数据进行运算

你好,C++(16)用表达式表达我们的设计意图——4.1 用操作符对数据进行运算 第4章    将语句编织成程序 学过C++中的各种数据类型, 就知道如何使用各种数据类型定义变量来描述现实世界中的各种事物了.现在,我们可以将一个工资统计程序大致写成下面这个样子: // 工资统计程序 int main() { // 表示员工个数的常量NUM const int NUM = 100000; // 保存所有工资的数组 int arrSalary[NUM]; // 保存平均工资的变量 float fSa