喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

上一主题 下一主题
 11  1/2  1  2  > 
     
标题: soap 之 nusoap 的使用  
 
sanshi0815 (sanshi0815)
高级会员
Rank: 4
中级会员



UID 63534
精华 1
积分 533
帖子 669
金钱 523 喜悦币
威望 10
人脉 0
阅读权限 50
注册 2005-3-18
状态 离线
soap 之 nusoap 的使用

今天不知道为什么想起了soap 这个东西,然后就弄了下,在php上使用的是nusoap。 一些基本的使用,高深的麻烦您自己看手册去
这个软件的下载在 http://dietrich.ganx4.com/nusoap  下面我会加上附件。

说说这个东西,我曾经以为能用这个东西完成跨域名登陆,但是今天发现好象实现不了,
到底在什么地方可以应用上,也很茫然,希望知道在那里应用的朋友指点下,谢谢了!

关于soap的具体的原理,什么的我就不多说,想知道的你网上自己找下,基本上就是http协议与xml的应用。
先说下个这个东西的实现原理,基本上就向服务器发送请求实现一个服务器上的函数运行,然后得到返回值。
值,我感觉应该是string或者数组,或者int值,应该不能用对象的。

先看一个基本的使用很简单的
这是 soap_server.php 文件  这个在网络上能找的到

<?php
include_once("lib/nusoap.php"); //插入文件
$server=new soap_server();     //生成对象
$server->configureWSDL("test_wsdl""");
$server->wsdl->schemaTargetNamespace="urn:test_wsdl"
$server->register("hello"//方法名 
array( 
"name"=>"xsd:string"
"call"=>"xsd:string"
"tele"=>"xsd:string"
),
//输入参数 
array( 
"return"=>"xsd:string"
),
//输出参数 
"urn:test_wsdl",//名字空间
"urn:test_wsdl#hello",//名字空间#要操作的函数名 
"rpc",//style 
"encoded",//use
"This is test."//说明 
); 
//test方法实现 
function hello($name,$call,$tele) { 
if(
$name==""){ 
return new 
soap_fault("Client","","Must supply a valid name."); 

return 
"Hello, " $name." ".$call." ".$tele

//Use the request to (try to) invoke the service 
$HTTP_RAW_POST_DATA=isset($HTTP_RAW_POST_DATA)?$HTTP_RAW_POST_DATA:""
$server->service($HTTP_RAW_POST_DATA);
?>
在你写完了以后,在浏览器里输入url,应该会看到一个页面,根据那个页面分析下,会有很大的收获,
client端要根据上面的使用
这个是soap _client.php

<?php
include_once("lib/nusoap.php");  //插入文件
//设置参数数组
$para=array( 
"name"=>"sera1ph.Liu"
"call"=>"123456"
"phone"=>"12345678"
); 
//生成客户端对象,注意下面的url  ?wsdl是必须加的前面为服务端的文件
$client=new soapclient("http://localhost/nusoap/soap_server.php?WSDL");
//呼叫/使用 那个函数,注意名字空间的区分
$return=$client->call('hello',$para,"http://localhost/soap/test_wsdl","test_wsdl#hello"); 
print_r($return);
?>
上面是一个很基本的使用,我想不过多的说了

下面看一个比较复杂的使用

<?php
require_once('../../lib/nusoap.php');
//取得值返回 返回的是一个数组
function validate($userName,$randomNum)
{
    
$temp['userName'] = $userName;
    
$temp['randomNum'] =$randomNum;
    return 
$temp;
}
//本想做个set一个get方法,但是这个时候发现了一个问题,以后再说
function refresh($refresh_userName,$refresh_randomNum)
{
    
$temp['userName'] = $userName;
    
$temp['randomNum'] =$randomNum;
    return 
$temp;
}

function 
logout($logout_userName)//注销用户名(退出登录)
{
$flag=$logout_userName;

    if(
$logout_userName=="" || $logout_userName!="叁石")
    {
    
$flag = -1;
    }

return 
$flag;
}

$soap = new soap_server();
//参数一,服务名字,也就是server文件
//参数二,名字空间
$soap->configureWSDL('AuthorityServicewsdl''urn:AuthorityServicewsdl');
//参数设置空间
$soap->wsdl->schemaTargetNamespace 'urn:AuthorityServicewsdl';
//上面跟原来的基本一样,但是大家注意声明的时候发生了变化
//下面是设置一个返回的数组类型
//参数一,为你自己命名的数据类型
//参数二,混合类型,不用管
//参数三。为结构体,或者数组(array)
//参数四,按照什么排序,有三个选择all(全部)|sequence(次序)|choice(选择)
//参数五,基本约束
//注意:上面5个我们不用改变
//参数6,最重要的参数,也就是我们返回的类型想对应
//返回数组下标 =>array('name'=>"数组下标",'type'=>"xsd:对应的类型") 
//类型基本包括 string,int, date,boolean 这几种形式
$soap->wsdl->addComplexType('userInfo','complexType','struct','all','',
        array(
            
'userName' => array('name'=>'userName''type'=>'xsd:string'),
       
'randomNum' => array('name'=>'randomNum''type'=>'xsd:string')
            )
        );

//这里是注册函数
//参数一,函数名
//参数二,是这个函数接受的参数,注意指定类型
//参数三,为返回的值,不一定名字非叫return,叫其他的也可以,注意返回的类型,
//我这里是返回我自己定义的类型 tns:userInfo 如果为基本的类型为 xsd:string 这个样子
//其他的参数,只要统一就可以了,尤其是名字空间跟 soapaction
$soap->register('validate',                                                                                    // method name
    
array('userName' => 'xsd:string','randomNum' => 'xsd:string'),    // input parameters
    //array('return' => 'xsd:string'),            // output parameters    
    
array('return' => 'tns:userInfo'),    
    
'urn:AuthorityServicewsdl',                    // namespace
    
'urn:AuthorityServicewsdl#validate',        // soapaction
    
'rpc',                                        // style
    
'encoded',                                    // use
    
'验证用户名及随机数'                        // documentation
);

$soap->register('refresh',                                                                                    // method name
    
array('refresh_userName' => 'xsd:string','refresh_randomNum' => 'xsd:string'),    // input parameters
    //array('return' => 'xsd:string'),// output parameters
    
array('return' => 'tns:userInfo'),    
    
'urn:AuthorityServicewsdl',                                                                            // namespace
    
'urn:AuthorityServicewsdl#refresh',                                                            // soapaction
    
'rpc',                                                                                                                    // style
    
'encoded',                                                                                                            // use
    
'按时地方'                                                                                                            // documentation
);

$soap->register('logout',                                                                                        // method name
    
array('logout_userName' => 'xsd:string'),                                                // input parameters
    
array('return' => 'xsd:int'),                                                                        // output parameters
    
'urn:AuthorityServicewsdl',                                                                            // namespace
    
'urn:AuthorityServicewsdl#logout',                                                            // soapaction
    
'rpc',                                                                                                                    // style
    
'encoded',                                                                                                            // use
    
'退出登录'                                                                                                            // documentation
);
//大家可能对 $HTTP_RAW_POST_DATA 这个变量比较疑惑,我们没有定义,怎么出来的呢
//我也有这样的想法,不过我看了下手册解释是 usually is the value of $HTTP_RAW_POST_DATA 
//所以大家就别管它了,就这样使用吧
$soap->service($HTTP_RAW_POST_DATA);
?>
我们现在看下 客户端的使用

<?php
require_once('../../lib/nusoap.php');

$client=new soapclient('http://localhost/nusoap/samples/server/AuthorityService.php?wsdl',true);
$err $client->getError();

$username "叁石";
$randomnum "d8A9";
$params1 = array('userName'=>$username,'randomNum'=>$randomnum);
$reversed $client->call('validate',$params1);//此为返回值
//echo "注册值<br>";
print_r ($reversed);
echo 
"<br>";

$refresh_username "叁石";
$refresh_randomnum "d8A9";
$params1 = array('refresh_userName'=>$refresh_username,'refresh_randomNum'=>$refresh_randomnum);
$reversed $client->call('refresh',$params1);
//echo "取得值<br>";
print_r ($reversed);
echo 
"<br>";

$logout_username "叁石";
$params1 = array('logout_userName'=>$logout_username);
$reversed $client->call('logout',$params1);
echo 
$reversed;
?>
这个就不用多说了,一看应该就明白了 是数组返回的我使用print_r输出了
关于这个功能,我说下我做的实验
首先我用set方法设置了下一个公共变量的值,当用get取得的时候,值为空
说明,每次是建立一个新的访问所以值没有保留
测试2,我使用cookie 设置的值,在get方法的时候,没有取得
说明:没闹明白原因
测试3,使用session  在get方法的时候,也没有取得值
说明,没闹明白
但是取得文件或者数据库连接取得值是没有问题的,也就是可以取得固定介质中的值,文件或者数据库

这个东西到底能干什么还真不清楚,我想是可以完成,2种不同语言的交接,比如 php与asp与jsp的交互
也许有人茫然了,我这里丢了一个感念,soap返回的是一个流,所有可以当作文本流来对待,
使用socket取得。
关于nusoap的使用就到这里了,我不大去弄它的具体原理了,能够使用就够了!所以没有对nusoap的代码做分析

作者:叁石
mail:sanshi0815@tom.com

[ 本帖最后由 sanshi0815 于 2006-8-6 06:30 PM 编辑 ]
2006-8-6 06:27 PM#1
查看资料  Blog  发短消息  QQ  顶部
 
糊涂仙
新手上路
Rank: 1


UID 76879
精华 0
积分 16
帖子 124
金钱 16 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-7-23
状态 离线
[推荐阅读] 我想把图片轮流交换位置应该怎么实现
做师傅家的沙发,哈哈



我是AK,欢迎您加入我的
php唠嗑群  15996399
2006-8-6 06:28 PM#2
查看资料  发短消息  顶部
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
[推荐阅读] smarty实例教程〔转〕1
soap是个很高深的应用哟,大家来研究研究



五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2006-8-7 08:52 AM#3
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
cfz_548 (cfz_548)
高级会员
Rank: 4
老会员



UID 20905
精华 0
积分 537
帖子 542
金钱 537 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2003-6-19
状态 离线
[推荐阅读] smarty实例教程〔转〕3
我最近也在学,用nusoap的,多交流一下,最好谁能弄个讨论群之类的!
2006-8-8 08:24 AM#4
查看资料  Blog  发短消息  顶部
 

注册会员
Rank: 2



UID 76763
精华 0
积分 90
帖子 70
金钱 90 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-7-20
状态 离线
[推荐阅读] smarty实例教程〔转〕4
nuSOAP是可以传送对象滴
当成array($instance)就可以了


其实WEB SERVICES原理蛮简单的,做过一次就会知道,何况有nusoap这强的工具
2006-8-10 10:53 AM#5
查看资料  发短消息  顶部
 
sanshi0815 (sanshi0815)
高级会员
Rank: 4
中级会员



UID 63534
精华 1
积分 533
帖子 669
金钱 523 喜悦币
威望 10
人脉 0
阅读权限 50
注册 2005-3-18
状态 离线
[推荐阅读] 发布单用户博客emlog2.1.6
顶起,为了新的发表打个基础
2006-8-15 01:58 AM#6
查看资料  Blog  发短消息  QQ  顶部
 
halley (halley)
新手上路
Rank: 1
初级会员



UID 21850
精华 0
积分 7
帖子 5
金钱 7 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2003-7-21
状态 离线
[推荐阅读] 垃圾站首选,发两套完美修小偷,电影小偷和BT下载
可惜的是生成的文件不如.net的那么漂亮,呵呵
2006-8-15 08:30 PM#7
查看资料  发短消息  顶部
 
sanshi0815 (sanshi0815)
高级会员
Rank: 4
中级会员



UID 63534
精华 1
积分 533
帖子 669
金钱 523 喜悦币
威望 10
人脉 0
阅读权限 50
注册 2005-3-18
状态 离线
[推荐阅读] PHP连接数据库问题!
要求太高,能用就行
2006-8-15 09:09 PM#8
查看资料  Blog  发短消息  QQ  顶部
 
cfz_548 (cfz_548)
高级会员
Rank: 4
老会员



UID 20905
精华 0
积分 537
帖子 542
金钱 537 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2003-6-19
状态 离线
[推荐阅读] 大家来轻松一起
可惜nusoap没有中文说明手册,否则上手应该更容易一点!
2006-8-17 04:24 PM#9
查看资料  Blog  发短消息  顶部
 
sunceenjoy
中级会员
Rank: 3Rank: 3
初级会员


UID 68584
精华 0
积分 262
帖子 249
金钱 262 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2006-2-13
状态 离线
[推荐阅读] 想破了头,都没有想明白!!
多谢楼主的这篇文章,详细介绍soap的文章真是少之又少,楼主的相对来还是比较详细的,多谢
2006-10-23 02:29 PM#10
查看资料  Blog  发短消息  顶部
 11  1/2  1  2  > 
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 


Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.035490 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP