天天看点

在Android中调用C#写的WebService(附源代码)

由于项目中要使用android调用c#写的webservice,于是便有了这篇文章。在学习的过程中,发现在c#中直接调用webservice方便得多,直接添加一个引用,便可以直接使用将webservice当做一个对象使用,利用vs2010中的代码提示功能就能爽歪歪地把想要的东西全部点出来。在android调用,麻烦了一点,但是也还好。主要是我们需要自己在代码中确定要调用webservice的方法名是什么,要传给webservice什么参数以及对应的参数名,另外,一些额外的信息比如soap的版本号,也需要了解了。

首先,让我们先准备一下webservice,webservice的代码很简单,一个是返回helloworld字段,另一个是原样返回用户发给webservice的字符串。

在Android中调用C#写的WebService(附源代码)
在Android中调用C#写的WebService(附源代码)

接着,我们需要下载一个android中调用webservice的类库

将下载的ksoap2-android-assembly-2.4-jar-with-dependencies.jar包复制到eclipse工程的lib目录中,当然也可以放在其他的目录里。同时在eclipse工程中引用这个jar包。

在Android中调用C#写的WebService(附源代码)

(1) 在adroidmanifest.xml中加入权限,<manifest>节点里面加入下面这句话

(2)、我们在android中建立两个按钮,分别对应webservice中的两个方法

在Android中调用C#写的WebService(附源代码)
在Android中调用C#写的WebService(附源代码)
在Android中调用C#写的WebService(附源代码)

在request(…)方法中,我们主要是想实现将webservice中方法名和调用的参数传入webservice。在这个方法中,主要应用了asynctask来处理webservice的调用,因为调用webservice是网络操作,可能会比较耗时,在android3.0以上,已经不允许在ui线程直接进行网络操作,另外,asynctask还可以直接更新ui上的控件。

在Android中调用C#写的WebService(附源代码)
在Android中调用C#写的WebService(附源代码)

我们的重点将放在callwebservice()这个方法中。这个方法里面封装了ksoap2类库里面调用webservice的一些对象。

(1) 指定webservice的命名空间和调用的方法名,如:

soapobject类的第一个参数表示webservice的命名空间,可以从wsdl文档中找到webservice的命名空间。第二个参数表示要调用的webservice方法名。

(2) 设置调用方法的参数值,如果没有参数,可以省略,设置方法的参数值的代码如下:

要注意的是,addproperty方法的第1个参数表示调用方法的参数名,该参数值要与服务端的webservice类中的方法参数名一致,并且参数的顺序一致。

(3) 生成调用webservice方法的soap请求信息。该信息由soapserializationenvelope对象描述,代码为:

创建soapserializationenvelope对象时需要通过soapserializationenvelope类的构造方法设置soap协议的版本号。该版本号需要根据服务端webservice的版本号设置。在创建soapserializationenvelope对象后,不要忘了设置soapsoapserializationenvelope类的bodyout属性,该属性的值就是在第一步创建的soapobject对象。

注:

(4) 创建httptransportsse对象。通过httptransportsse类的构造方法可以指定webservice的wsdl文档的url:

web_service_url是指webservice的地址,如"http://192.168.0.121:80/testandroidcall/webservice1.asmx?wsdl"这样的

(5)使用call方法调用webservice方法,代码:

call方法的第一个参数一般为null,第2个参数就是在第3步创建的soapserializationenvelope对象。

(6)使用getresponse方法获得webservice方法的返回结果,代码:

(7)最后,附上完整的callwebservice()方法

在Android中调用C#写的WebService(附源代码)
在Android中调用C#写的WebService(附源代码)

要运行文章中的代码,请先将webservice部署在iis上,要保证android手机的测试程序和webservice处在同一个局域网中。

<a href="http://files.cnblogs.com/kissazi2/testwebservicecall.rar" target="_blank">android端源代码</a>

<a href="http://files.cnblogs.com/kissazi2/testandroidcall.zip" target="_blank">webservice源代码</a>

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:http://www.cnblogs.com/kissazi2/p/3406662.html

继续阅读