Service通信实例,需要的朋友可以参考下
注:本例中构建Web
Service采用SOAP方式,通过php插件NuSoap来搭建SOAP服务器。
代码如下:
<?
require_once("lib/nusoap.php")
//调用NuSoap
$server
=
new
soap_server()
//创建soap服务端
$server->configureWSDL("login_service")
//配置WSDL
$namespace
=
"http://www.abcd9.com"
$server->wsdl->schemaTargetNamespace
=
$namespace
//设置wsdl命名空间为http://www.abcd9.com
$server->register(
//
注册Web服务
'login_verifiy',
//定义名称
array('name'=>'xsd:string','pw'=>'xsd:string'),
//接受参数
array('return'=>'xsd:string'),
//返回
$namespace,
//命名空间
false,
//
soapaction:默认
'rpc',
//
类型:
rpc
or
document
'encoded',
//
参数:encoded(编码)或
literal(文字)
'A
web
method
of
login'
//描述
)
$POST_DATA
=
isset($GLOBALS['HTTP_RAW_POST_DATA'])?
$GLOBALS['HTTP_RAW_POST_DATA']
:
''
$server->service($POST_DATA)
//将提交的数据传递给soap服务
function
login_verifiy($user,$pw)
{
//服务执行内容,本示例中为显示输入的帐号密码
return
'user:'.$user.'
password:'.$pw)
}
?>
C#客户端调用:
代码如下:
[DllImport("kernel32")]
//调用api函数读ini文件。返回值为字符串缓冲区的长度
private
static
extern
long
GetPrivateProfileString(string
section,
string
key,
string
def,
StringBuilder
retVal,
int
size,
string
filePath)
private
void
Form1_Load(object
sender,
EventArgs
e)
{
StringBuilder
temp
=
new
StringBuilder(256)
GetPrivateProfileString("system",
"url",
null,
temp,
256,
System.IO.Directory.GetCurrentDirectory()+"config.ini")
//通过读取config.ini配置文件(结构见附加内容)来获取webservice
url
Program.server_url
=
temp.ToString()
//Program.cs中的全局变量server_url用以储存webservice
url
}
private
void
button1_Click(object
sender,
EventArgs
e)
{
WebReference.login_service
l
=
new
WebReference.login_service()
string
s=l.login_verifiy(username.Text,
password.Text)
MessageBox.Show(s)
}
附config.ini内容:
代码如下:
[system]
url=http://127.0.0.1:100/
说明:本文章记录的是基于springboot搭建的cxf服务端和soap客户端调用
说明:目前我使用到了四个注解,分别是
@WebService:表明该接口是一个webservice服务接口,注解里的属性值可以设置生成的wsdl文档的命名空间等信息,此处没有遇到相关错误,因此没有进行设置,不过建议还是设置上。
@WebMethod:表明该方法是服务要发布的方法,对应属性也可以设置上
@WebResult:设置方法返回值,此处最开始没有设置导致获取不到返回值,因此务必设置上
@WebParam:设置参数信息,指定参数名字和参数所属命名空间,必须设置,不然可能导致参数不能传递进来
说明:实现类上需要贴上注解,方法不需要
说在前头:这里我只是实验了拦截器的定义,没有什么具体的业务操作,想学习的同学请自行研究
此时启动boot项目就可以访问到wsdl文档
第一个就是请求参数无法传递进去,解决办法是设置@WebParam注解的targetNamespace属性值
这个主要就是报非法属性异常
第二个就是无法获取到返回值,解决办法就是需要添加@WebResult注解并设置对应的属性值
这个主要就是在客户端获取返回值哪里报空指针异常
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)