kSoap访问.Net的WebService的基本方法及问题
来源:互联网 发布:头像源码图片怎么用 编辑:程序博客网 时间:2024/04/28 11:30
本文适用读者:了解基本J2ME概念,正从事于对.NET开发WebService调用的用户。如果有对Java 平台下开发WebService(例如使用AXIS)的问题,可以参阅经典的文章《kSOAP的运用——郑昀》(见Reference 3)。
SOAP协议版本
可以通过SoapSerializationEnvelope或者SoapEnvelope的构造函数来指明你要用SOAP的协议版本,可以是如下几种之一:
常量SoapEnvelope.VER10:对应于SOAP 1.0规范
常量SoapEnvelope.VER11:对应于SOAP 1.1规范
常量SoapEnvelope.VER12:对应于SOAP 1.2规范
SoapSerializationEnvelope
SoapSerializationEnvelope是kSOAP2新增加的类,是对SoapEnvelope的扩展,对SOAP序列化(Serialization)格式规范提供了支持,能够对简单对象自动进行序列化(simple object serialization)。因为是对.NET WebService进行调用,需要对dotNet 属性设置为true。
SoapObject
SoapObject可以让用户方便的对SOAP调用;他的构造方法有两个参数 :Namespace与MethodName。
特别注意Namespace默认在.NET中设为"http://tempuri.org/" ,应注意不要把最后的’/’丢掉,可能在kSOAP生成Request的时候会有错误!
HttpTransport
HttpTransport屏蔽了Internet访问/请求和获取服务器SOAP的细节。通过对requestDump的分析发现,如果Soap request中缺少了"<?xml version=/"1.0/" encoding=/"UTF-8/"?> 就会发生.NET WebService服务器端的解析失败!因而需要在HttpTransport对象中通过setXmlVersionTag方法将其加入。
线程
由于HttpTransport类实际上是调用了HttpConnection作网络连接,所以必须另起一个线程来专门做kSOAP工作,否则会堵塞操作。下述例程仅作说明,对线程的封装需要额外设计。
返回结果
在kSOAP2中SoapSerializationEnvelope中通过getResult()方法获得返回Object的方法已经作废(deprecated),可以通过getResponse()来获得。
调试运行
如果在WTK运行时发现NoClassDefFoundError Exception异常,则可以考虑是kSOAP2的jar包未导入。正确的导入方法是将jar文件拷贝至WTK/lib文件夹下,如果是Eclipse环境下开发,还需在Project->Properties->java Build Path中导入jar文件,并在该窗口下Order and Export中将该jar文件也选中即可。
如果有特别异常,可以通过HttpTransport中的requestDump()与responseDump()方法将封装好多SOAP请求与收到的响应进行显示,对比后排除错误,这很必要!
String Namespace = "http://tempuri.org/";String MethodName = "GetWorkerName";SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); SoapObject request = new SoapObject(Namespace, MethodName); request.addProperty( "pipeNo", "RFID000045" ); envelope.bodyOut = request; envelope.dotNet = true; envelope.setOutputSoapObject(request); HttpTransport ht = new HttpTransport("http://[Your IP/Namespace]/WebSiteTestService/Service.asmx"); ht.debug = true; ht.setXmlVersionTag("<?xml version=/"1.0/" encoding=/"UTF-8/"?>"); ht.call("http://tempuri.org/GetWorkerName", envelope); Object result = envelope.getResponse();
Reference
1. kSoap JavaDoc or API
http://ksoap2.sourceforge.net/doc/api/
2.kSoap下载
http://sourceforge.net/projects/ksoap2/
3. kSOAP的运用
http://blog.csdn.net/zhengyun_ustc/archive/2007/01/17/1485436.aspx
4. J2ME下访问.net的WebService
http://www.j2medev.com/blog/user2/80135/4802.html
- kSoap访问.Net的WebService的基本方法及问题
- 关于ksoap连接webService的问题
- Android 采用KSoap访问传入实体对象的webservice
- Android通过ksoap调用webservice遇到的问题及解决之道全纪录
- Android调用PC服务器的webService的方法(KSOAP)
- 关于android,ksoap方面的webservice调用的一些问题
- 【J2ME】KSOAP 调用 .Net Webservice
- iPhone访问.Net WebService的3种方法
- Android ksoap 访问https SSL Webservice报错 javax.net.ssl.SSLException: Not trusted server certificate
- android通过ksoap协议与服务器发布的webservice通信
- 关于android3.0及以后版本访问webService的问题
- android 访问WebService的方法
- Android 访问WebService的方法
- android通过ksoap访问webservice方法传递一个复杂对象参数
- JS访问WebService的问题
- [J2ME/kSOAP]kSOAP的运用讲义
- asp.net 发布WebService出现的各种问题及解决方法
- [j2me]kSOAP的运用
- 武定-兔子-SendMessage()这个函数有很多奇妙的用途API
- Vista市占率不足10% 用户变招应对XP停售令
- 我为什么还在使用Windows 95
- MyEclipse6.0访问oracle报错
- 对初级软件开发者的一些建议
- kSoap访问.Net的WebService的基本方法及问题
- Core Java day01
- 编写简练代码是程序员的职业修养之本
- NetBeans 时事通讯(刊号 # 15 - Jul 08, 2008 )
- Delphi7.0自带Indy 9基础介绍 - lee576的专栏 - CSDNBlog
- IEEE 802.15.4与ZigBee协议
- C++ Dll
- PECompact v2.90.1
- TPL + Json + PHP = TPL + JSPT