axis1 c# 接口 调用_C#调用Axis生成的Web Services

这次天津朗新的接口把原来浙江南网的WEBSERVER进行了升级,由于对方采用的是AXIS开发的服务,所以对方所给的例程是JAVA的例程,而对别的语言所做接口则没有说明。从网上看了很多朋友提出类似的问题,都没有正确答案,我也在网上查找了很多资料,又到AXIS的官网上的查了下,都没什么大的收获,直到无意中看到两篇文章:一个是把NET整合进其它平台,一个是SOAP的三种使用方法(同济黄正http://www.diybl.com/course/4_webprogram/asp.net/asp_netshl/2008320/105904.html)这两种方法给我很大启示,我于是整理了一下思路,把这两种文字内容整合了一个动态库文件,在天津项目中调试成功。其主要思想是:

1、自己按照服务要求载入XML文件到SOAPHEADER中。

XmlDocument doc = new XmlDocument();

xmlHeader:即为你所要求的SOAPHEADER的样式,可以用STRING直接组成,也可以由STRINGBUILDER的自由组合。然后转成STRING即可。

AddDelaration(doc);

XmlElement soapBody = doc.CreateElement("soapenv", "Body",

"http://schemas.xmlsoap.org/soap/envelope/");

XmlElement soapMethod = doc.CreateElement(MethodName);

soapMethod.SetAttribute("xmlns", XmlNs);

foreach (string k in Pars.Keys)

{

//xsi:type="xsd:string"

XmlElement soapPar = doc.CreateElement(k);

soapPar.SetAttribute("xsi:type", "xsd:string");

soapPar.InnerText = Pars[k].ToString();

soapMethod.AppendChild(soapPar);

}

注意:上面用哈希表插入参数,总是报错,后来发现,哈希表会自动排序,造成参数顺序错误,无法识别程序的内容。所以做为测试,直接改成了下面的样子,成功。

string test = "<?xml

version="1.0"?>

N="APP_NO">200810119759

N="METER_ID">11607030

N="TEST_RSLT">1

";

XmlElement soapPar = doc.CreateElement("path");

soapPar.SetAttribute("xsi:type", "xsd:string");

soapPar.InnerText =

"epm/mp/sitechk/service/LocaleCheckResultLoadService";

soapMethod.AppendChild(soapPar);

soapPar = doc.CreateElement("methodName");

soapPar.SetAttribute("xsi:type", "xsd:string");

soapPar.InnerText = "setMeterSitechk";//"GET_METER_SITECHK";

soapMethod.AppendChild(soapPar);

soapPar = doc.CreateElement("dataXmlStr");

soapPar.SetAttribute("xsi:type", "xsd:string");

soapPar.InnerText = test;

soapMethod.AppendChild(soapPar);

soapBody.AppendChild(soapMethod);

doc.DocumentElement.AppendChild(soapBody);

return Encoding.UTF8.GetBytes(doc.OuterXml);

2、利用上述文中提到的HTTPWEBREQUEST和WebResponse发送和接收消息。

WebResponse response = request.GetResponse();

StreamReader sr = new StreamReader(response.GetResponseStream(),

Encoding.UTF8);

XmlDocument doc = new XmlDocument();

doc.LoadXml(sr.ReadToEnd());

return doc.SelectSingleNode("//@targetNamespace").Value;

3、注意,在朗新的接口中对参数的顺序是有要求的,所以一定要记得把参数顺序整理好,否则会得到错误结果。

这个程序这样写有一个很大的优点不是可以任意的组合SOAP达到跨超平台的使用,这里再次感谢上述两篇文章的作者,如果没有你们的启发,我无法顺利的完成这个项目。

如果有朋友需要这个DLL,可以与我联系,我会把库文件和如何使用的方法告诉大家。我的联系方式:

fpcfjf@126.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值