SOAP返回的那个XML 文件怎么获取,

我的问题出在当我创建了一个SoapClient后,调用里面的API报错,说的是返回的XML不符合WSDL定义的规范,所以我就想看看返回的XML文件的内容。。... 我的问题出在当我创建了一个SoapClient后,调用里面的API报错,说的是返回的XML 不符合WSDL定义的规范,所以我就想看看返回的XML文件的内容。。 展开
 我来答
sunzihao128858
2012-04-11
知道答主
回答量:3
采纳率:0%
帮助的人:3265
展开全部
一. 必备知识

1.wsdl(web服务标记语言)

WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问。

具体参考请访问下面网址

http://www.w3school.com.cn/wsdl/index.asp

2.soap

SOAP 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息。

具体参考请访问下面网址

http://www.w3school.com.cn/soap/index.asp

3.php扩展

具体参考请访问下面网址

http://php.net/manual/en/book.soap.php

二. php soap开发模式

1. working in swdl mode(契约先行(Contract first)模式)

  契约先行模式使用了一个用XML定义的服务接口的WSDL文件。WSDL文件定义了服务必须实现或客户端必须使用的接口。SoapServer和SoapClient的WSDL模式就基于这个概念。也就是用soap通讯的时候必须先有一个定义过的服务接口,才能进行通讯。

  

2. working in non-swdl mode(代码先行(Code first)模式)

在代码先行模式中,首先要先写出实现服务的代码。然后在大多数情况下,代码会产生一个契约,换种说法,一个WSDL。接着客户端在使用服务的时候就可以使用那个WSDL来获得服务的接口。尽管如此,PHP5的扩展并没有从代码输出一个WSDL的规定,考虑到这种情况,可以在non-WSDL模式下使用 SoapServer和SoapClient。也就是说在soap通讯的时候并不需要一个预先定义过的服务接口,代码会自动的产生。

三.参考例子:

  下面介绍如何使用WSDL模式和non-WSDL模式来实现服务和客户端。相对而言,使用WSDL模式来实现服务和客户端会比较容易。

1. noWSDL模式实现

服务端 server.php

<?php

class test

{

/**

*

* @return string

*/

function show()

{

return 'hello world!';

}

}

#####################################################

$server = new SoapServer(null, array('uri' => "http://test-uri/"));

$server->setClass('test');

$server->handle();

?>

客户端 client.php

<?

$soap=new SoapClient(null, array(

'location' =>'http://soapserver_url/server.php',

'uri' => "http://test-uri/"));

print_r($soap->__getFunctions());

echo $soap->show();

?>

2. WSDL模式实现

第一步:编写服务端类文件

class..php

<?php

class test

{

/**

*

* @return string

*/

function show()

{

return 'hello world!';

}

}

?>

第二步:将类文件生成 wsdl文件server.wsdl。

由于wsdl文件编写比较复杂,所以我们用第三方工具生成。我们以zend studio为例子演示:

Tools ==> WSDL Generator ==> Configration name : test; WSDL file name: server

==>NEXT ==> 点击 + ==> 选择上面的创建的class.php ==> 这时候会看到一个 classes?? : URL Location的映射,保留 test类前面的勾,并将其url 设置为 SOAP Server的url:http://soapserver_url/server.php ==>点击Finish,ZDE就会创建一个非常漂亮的WSDL了?? 工作基本上完成了.

第三步:服务端编写:

<?php

require ' class..php '; //引入类文件

$server = new SoapServer('server.wsdl');

$server->setClass('test');

$server->handle();

?>

第四步:客户端编写

$soap = new SoapClient('http:// soapserver_url/server.wsdl');

print_r($soap->__getFunctions());

echo $soap->show();

以上两个例子只是一个简单的soap服务编写,已经可以满足大部分需要。如果需要更加高级的功能请参考其他方面的资料。

三. 出现的问题。

1.在方法中对属性的赋值在其他方法中不起作用。

比如在客户端调用服务端某个方法对某个属性赋值。

在其他方法里就不能用。但在 __construct 方法中对属性的赋值是可以个在其他方法中使用的。

2. 提示 Client] looks like we got no XML document错误。

服务器端文件在<?php ?> 标签前后都不要有任何数据包括空格,空行。

3. Warning: SoapClient::SoapClient(): I/O warning : failed to load external entity

原因如下:PHP程序作为 SOAP客户端 采用 WSDL 模式访问远端服务器的时候,PHP是通过调用 libcurl 实现的。至少在 PHP5.2.X 是这样的。如果采用 non-WSDL 模式,就不需要 libcurl。在solaris 没有缺省安装 libcurl,也许是我没有安装。除了 了ibcurl以外,至少还关联的库包括:

libidn,ibgcc,libiconv,libintl,openssl
钭问青
2011-09-08 · TA获得超过329个赞
知道答主
回答量:427
采纳率:0%
帮助的人:252万
展开全部
这个问题好像挺抽象的,不太明白。c有自己的函数库,一些标准函数加上头文件就可以直接调用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
li...9@163.com
2011-09-09 · TA获得超过107个赞
知道答主
回答量:278
采纳率:100%
帮助的人:146万
展开全部
这个问题好像挺抽象的,不太明白。c有自己的函数库,一些标准函数加上头文件就可以直接调用
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式