Ⅰ php怎么生成wsdl文件
办法有两种:
1.zend studio生成
对于zend studio 9之前的版本貌似直接生成:
File ->New -> Other-> Webservice-> WSDL
对于zend studio 9需要安装wsdl插件:
1、打开zendstudio9,选择help(帮助)->welcome
2、在右边的列表中找到WSDL Support,勾选
3、点击Apply changes(应用修改)
4、zde会自动安装,然后提示要重启,点击restart now(现在重新启动)
wsdl支持安装完毕,下面我们来生成一个wsdl文件,步骤如下:
1、选择保存wsdl的项目文件夹
2、右键-new(新建)->other(其他)
3、在弹出的对话框中选择web services,在下级菜单中选择WSDL file,点击next进入下一步
4、命名你的wsdl文件,点击next进入下一步
5、修改target namespace(目标名称空间),其他不变,点击finish。
2.利用SoapDiscovery.class.php生成
Ⅱ PHP如何调用webservice
最近工作中需要用php调用webservice接口,对php不熟,上网搜搜,发现关于用php调用webservice的文章也不多,不少还是php4里用nusoap这个模块调用的方法,其实php5里已经包含了处理soap的模块,但是资料太少了,上php官网上查帮助,写的不是很容易理解,经过多次实践,终于搞清楚了,php调用webservice还是非常简单的。下面用一个例子说明:
webservice服务是查询QQ用户是否在线
使用php5开发客户端:
<?php
try{
//$client=newSoapClient("HelloService.wsdl",array('encoding'=>'UTF-8'));
$client=newSoapClient("webservices/qqOnlineWebService.asmx?wsdl");
var_mp($client->__getFunctions());
print("<br/>");
var_mp($client->__getTypes());
print("<br/>");
classqqCheckOnline{
var$qqCode="10000";
};
$arrPara=array(newqqCheckOnline);
$arrResult=$client->__Call("qqCheckOnline",$arrPara);//$client->qqCheckOnline($arrPara);
echo$arrResult->qqCheckOnlineResult."<br/>";
}catch(SOAPFault$e){
print$e;
}
?>
代码确实很简单吧,创建SoapClient对象时,可以使用保存在本地WSDL文件,也可以使用远程的地址,后面的array数组里可以带上很多的参数,具体参数可以查php的SoapClient帮助,这里带的是字符集编码,如果调用方法的参数里有中文,一定要指定字符集编码,否则会出错。
调用webservice前可以先调用SoapClient的__geunctions()和__getTypes()方法看一下你要调用的webservice暴露的方法,参数和数据类型,需要注意的是传入的参数名一定要和soapclient里面定义的一致,否则参数是传不过去的。
需要使用SoapClient的__soapCall()或__call()方法,具体使用方法可以查php的帮助文档。如果参数要求是一个结构体,请用类代替,如上面的代码。
另外发现个问题,如果webservice方法返回的是xml格式的字符串,php接收到以后会自己把数据内容解析出来,而不是xml字符串.
Ⅲ 高分求java实现SAOP、WSDl用法例子(最好是电信与sp之间通信的例子)
当我们用web service对外提供接口服务的时候,可能很多接口会返回复杂类型,比如数组; 在此次利用.Net下面WCF和我们ASSP API【Alisoft SaaS Platform API】进行联调的时候,就发现了问题;如果要想让通过WSDL发布的web service具有最大化的兼容性,最好是参考WS-I【Web Services Interoperability】标准,而不要仅仅局限于SOAP标准;以下就返回数组的问题进行下探讨;
ASSP API接口之一为getUsingUser,返回的对象为数组,数组元素也为复杂对象SimpleUserInfo,其中包括两个属性userId和userName;在WSDL声明此type的时候默认采用的是soapenc:Array的方式,这也是SOAP规范中的方式;其声明部分如下:
<xs:complexType name="ArrayOfSimpleUserInfo">
<xs:complexContent>
<xs:restriction base="soapenc:Array">
<xs:attribute ref="soapenc:arrayType" wsdl:arrayType="ns1:SimpleUserInfo[]"></xs:attribute>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
该声明方式在和大部分的客户端语言联调时没有问题,比如Java、.Net WSE 2.0、.Net WSE 3.0、Php;但是在利用WCF进行联调时就出现了问题,其表现为:1)在vs2008中通过Add Service Reference添加服务时不成功,生成的代理类为空;2)若通过命令行工具Svcutil生成,提示不成功,但能看到错误信息,提示如下:
System.ServiceModel.Description.
错误: 引用类型“http://schemas.xmlsoap.org/soap/encoding/:Array”仅对编码的SOAP 有效。
经查,出现以上问题就是由于soapenc:Array的声明方式所导致,SOAP规范中的这种方式兼容性很不好,这点在WS-I BP【WS-I Basic Profile】中有过重点说明;后修改成unbounded模式后测试通过,修改后的声明方式为:
<xs:complexType name="ArrayOfSimpleUserInfo">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="SimpleUserInfo" nillable="true" type="ns1:SimpleUserInfo" />
</xs:sequence>
</xs:complexType>
soapenc:Array的问题解决之后,WCF环境下的联调并没有完全成功,还差一点点;WSDL声明修改之后,vs2008中添加服务引用正常了,调用服务端ws也正常了,在responseXml中返回了正常的结果,但是WCF对responseXml解析出来的结果却有问题,userId为null,userName正常,难道userId的信息丢掉了!后经MS人员查证之后是由于WSDL中声明SimpleUserInfo中属性信息和soap responseXml中属性信息的先后顺序不一致所导致!为了不让ISV修改客户端生成的代码,所以只好修改了服务端WSDL中userId、userName两者的顺序,之后问题全部解决;
总结下,虽然说web service说是完全跨平台的,但在实际开发过程中还是会出现很多的不兼容问题,这不仅仅是由于开发人员的代码编写上,连某些标准规范都是有瑕疵的,并不是说遵循了SOAP标准规范就没有任何问题了,至于这点,大家可以多参考WS-I标准,他里面指出了很多能够保证最大化兼容性的措施和方法,这会非常有用;
Ⅳ php如何调用webservice的带两个参数的远程方法
这是给出来的说明
你请求这个地址就行了,在地址后加?WSDL
然后再请求web service里提供给你的方法,传进去需要的参数
方法的返回值就是你需要的数据
第一步:支持asp
win98要安装pws!但我们谈论的是如何使win2000支持!只要你在安装win2000的时候使用的是完全安装!那么iis就安装好了,有了iis就支持asp了!如果没有安装iis!那么请在控制面板里面点击“添加/删除程序”里面的”添加/删除组件“安装iis!
第二步:支持php
首先下载一个php解析软件!安装PHP。执行下载到硬盘里面的php-4.3.0-installer.exe 安
装提示,我们回车就可以。选择PHP路径,没有太大的影响的话,一般不要更改(默认c:\),填写邮件服务器,一般是LOCALHOST,还有发送的电子邮件信箱。
Ⅳ PHP如何调用webservice,知道的高手进
SOAP的WebService是可以直接使用的,php有支持SoapClient的,用起来很容易
<?php
$wsdl = "http://192.168.1.2/jaxws/services/test?wsdl";
$client = new SoapClient($wsdl);
$param = array('arg0'=>'arg0','arg1'=>'arg1');
$ret = $client->getUserinfoByID($param);
if ($ret->return){
print_r($ret->return);
}else{
echo 'no user';
}
具体SoapClient需要php的soap支持,看phpinfo里有soap的话就可以了,比如这样:
soap
Soap Client enabled
Soap Server enabled
Directive Local Value Master Value
soap.wsdl_cache 1 1
soap.wsdl_cache_dir /tmp /tmp
soap.wsdl_cache_enabled 1 1
soap.wsdl_cache_limit 5 5
soap.wsdl_cache_ttl 86400 86400
Ⅵ php webservice是什么
一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术。
所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。
所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一个对象的方法,譬如,银联提供给商场的pos刷卡系统,商场的POS机转账调用的转账方法的代码其实是跑在银行服务器上。再比如,amazon,天气预报系统,淘宝网,校内网,网络等把自己的系统服务以webservice服务的形式暴露出来,让第三方网站和程序可以调用这些服务功能,这样扩展了自己系统的市场占有率,往大的概念上吹,就是所谓的SOA应用。
其实可以从多个角度来理解WebService,从表面上看,WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是说能用编程的方法通过Web来调用这个应用程序。我们把调用这个WebService的应用程序叫做客户端,而把提供这个WebService的应用程序叫做服务端。从深层次看,WebService是建立可互操作的分布式应用程序的新平台,是一个平台,是一套标准。它定义了应用程序如何在Web上实现互操作性,你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。
WebService平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性,WebService平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。Web service平台必须提供一种标准来描述Web service,让客户可以得到足够的信息来调用这个Web service。最后,我们还必须有一种方法来对这个Web service进行远程调用,这种方法实际是一种远程过程调用协议(RPC)。为了达到互操作性,这种RPC协议还必须与平台和编程语言无关。
至于php嘛, 就是一门动态的脚本语言, 无需和webservice画上勾