C#使用PHP服务端的Web Service通信实例

C#使用PHP服务端的Web Service通信实例,第1张

这篇文章主要介绍了C#使用PHP服务端的Web

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注解并设置对应的属性值

这个主要就是在客户端获取返回值哪里报空指针异常


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/400644.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存