C#调用JAVA的WebService方法

阅读: 评论:0

2024年2月3日发(作者:)

C#调用JAVA的WebService方法

.NET调用JAVA的WebService方法

调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,在网上也有相关资料,但是都整理的不够清晰明了。根据网上的资料,个人也对各种方法进行了尝试,费了不少精力,为此特将自己的解决方法进行总结一下,以备以后需要以及相关朋友参考。

先说说的思路:

1、先用soapUI进行测试,这个工具会自动生成调用某个方法的XML。

2、把soapUI生成的XML作为模版,自己也生成一个一模一样的XML并为参数节点赋好值。

3、将这个XML通过http直接发送给WebService。

4、接收返回的XML进行处理。

这样做最大的好处就是可以自己很轻松的控制XML格式,最开始的时候我是通过添加引用的方式去调用某个方法一直失败,但是用soapUI去测试这个方法又是可以成功调用的,折腾了半天,最后通过抓包的方式对发送的数据进行对比,发现两者发送的XML相差甚远,好了废话不说了,就拿一个小实例来演示这个过程吧。

首先,通过soapUI工具测试调用WebService里一个名为getPopCheckedInfo的方法,生成的XML如下:

soapUI生成的XML

上面三个用汉字标示的地方就是我们要修改赋值的地方,大家看到了吧,如果用添加引用自动生成代理类的方式,要产生这样格式的XML有多难控制了吧,但是如果全部用代码来生成也不是一件容易的事,个人用了一个比较巧妙的办法:

在项目中添加一个名为“getPopCheckedInfo”的xml文件,将上面的XML粘贴上去,然后再将这个XML文件作为内嵌资源(在这个的文件属性里面的‘生产操作’选择‘嵌入的资源’),使用的时候直接加载这个XML文件,然后修改那3个节点的值就可以了(用户名和密码一般都预先确定的,也可以直接写在XML文件里,调用的时候就只要对那一个参数赋值了)。使用内嵌资源是为了不让外面看到我们的那个XML文件,以防被修改了什么的。

下面看看调用的代码实现吧:(为了理解方便清晰,我们用跟WebService上一模一样的方法名和参数)

///

/// 根据居民id获取该居民信息

///

/// 居民id

public static People getPopCheckedInfo(string id)

{

String ServerUrl = ServerURL();//得到WebServer地址

Hashtable pars = new Hashtable();//用来存放参数

pars["arg0"] = id;

XmlDocument xml = oapWebService(ServerUrl, "getPopCheckedInfo", pars);

//这个是对返回的XML文件处理,我删掉了,处理完后返回一个居民的实体对象

return myPeople;

}

oapWebService方法代码:

///

/// 通用WebService调用(Soap),参数Pars为String类型的参数名、参数值

///

public static XmlDocument QuerySoapWebService(String URL, String MethodName, Hashtable Pars)

{

HttpWebRequest request = (HttpWebRequest)(URL);

= "POST";

= @"gzip,deflate";

tType = @"text/xml;charset=utf-8";

ent = @"Jakarta Commons-HttpClient/3.1";

tials = tCredentials;

t = 10000;

byte[] data = EncodeParsToSoap(Pars, MethodName);

WriteRequestData(request, data);//将处理成字节组的XML写到流中发送到服务端

XmlDocument doc = new XmlDocument();

doc = ReadXmlResponse(ponse());//读取服务端返回的结果

return doc;

}

EncodeParsToSoap(Pars, MethodName),处理XML文件方法的代码:(以下仅供参考,大家根据自己的实际情况变动)

处理XML文件方法的代码

最后还有WriteRequestData、ReadXmlResponse两个方法的代码:

///

/// 写到流中,发送给服务端

///

/// HttpWebRequest连接对象

/// 要写入连接流发给服务端的内容

private static void WriteRequestData(HttpWebRequest request, byte[] data)

{

tLength = ;

Stream writer = uestStream();

(data, 0, );

();

}

///

/// 读取服务端返回的结果

///

private static XmlDocument ReadXmlResponse(WebResponse response)

{

StreamReader sr = new StreamReader(ponseStream(), 8);

String retXml = End();

();

XmlDocument doc = new XmlDocument();

l(retXml);

return doc;

}

C#调用JAVA的WebService方法

本文发布于:2024-02-03 15:09:30,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170694417050717.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:方法   调用   进行   文件   服务端
留言与评论(共有 0 条评论)
   
验证码:
排行榜

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23