一,服务器端webservice的建立
没了客户端发布的程序,哪来的调用,所以服务器端的程序少不了,客户端的代码只有几句,只是小小的验证并返回我们需要的结果
这里我选用了visual stuio 2010 (VS)版本,网上有很多教程可以参考
由于我们调用的是webservice服务,打开VS后通过文件——新建——网站
在出现的新建网站对话框中按所需语言(这里选C#)选择,并选择ASP.NET网站(图1)
注意.NET版本的选择(版本的影响自己搜),web位置的填写
网站建立好后,我们给项目添加一个新项(如下图2)并重新命名为webservice.asmx
图2
打开新建项,其他的先不要管,按照原有的HelloWorld方法建立自己所需方法,这里是一个简单的用户验证,代码就这么多,(单个用户的验证够了)(图3)
图 3
保存好之后,回头分析一下里面的内容,里面有之后要用到的内容
[WebService(Namespace ="http://tempuri.org/")]这个是本项目的命名空间,由于只是测试,命名空间不规范,另外还有所需的方法名Login(String,String);
到这一个简单的webservice项目就已经建立完成了
二、将 webservice项目部署到服务器的IIS中
这里所用的服务器是windows server 2008
打开Internet信息服务(IIS)管理器(图4)
在右边选项栏中由选网站——新建网站——配置网站的默认文件地址,端口等,配置如下图5
这里的网站是Test,然后选中已经建立好的网站右击选择添加虚拟目录,命名一个别名(这里用Usercheck),物理路径选择你之前写好的webwervice项目的所在目录。
之后更该默认文档为WebService2.asmx,最后将你添加的虚拟目录转换为应用程序。
现在就可以进行一下验证了,单击右边选项栏中的浏览可以在浏览器中查看
我们之前写的方法出现了 helloworld是建立网站项目的时候自带的没删除,login是我们自己写的小示例,点击login进入验证如下图
输入name和password(注意之前定义的正确的验证是admin&123)进行验证。点击严重页面跳转出现返回值
好了 服务器端的程序已经完成了,例子很简单,代码不多,主要是对于webservice的建立与部署。
三、android客户端的调用
客户端的程序很简单,布置了两个Activity,第一个Activity是登陆界面,第二个是完成登陆验证后的跳转界面(注意两个Activity都要在配置文件中说明),布局如下图,布局代码就不贴了 很简单.但有一点很重要
一定要引入第三方的jar包 Ksoap2-android-**** ,这个在网上可以下载
核心代码如下 主要出现的问题是要注意返回值的类型,代码中有注释说明,目前还有问题没解决
**
StringNAMESPACE=http://tempuri.org/;//看到没 在服务器端写的网站项目的命名空间在这用到了,
StringMETHOD_NAME="login";//要调用的方法,必须和服务器端写的方法一致
StringURL=http://192.168.***.***:180/Usercheck/UserService.asmx;
**
*
//指定WebService的命名空间和调用的方法名
SoapObject request =new SoapObject(NAMESPACE,METHOD_NAME);
//处理soap12:Body数据部分
request.addProperty("name", userName);
request.addProperty("password", password);
//SoapEnvelope.VER11表示使用的soap协议的版本号 1.1 或者是1.2
SoapSerializationEnvelope envelope =new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = request;
envelope.dotNet =true;//指定webservice的类型的(java,PHP,dotNet)
envelope.setOutputSoapObject(request);
HttpTransportSE ht =new HttpTransportSE(URL);
ht.debug =true;
try {
//访问webservice服务器
ht.call(NAMESPACE+METHOD_NAME, envelope);
/*
*不同的接收方式其得到的返回值不同,
*若用SoapObject object=(SoapObject) envelope.bodyIn;其返回值格式是: loginResponse{loginResult=1;}
*若用Object object=(Object)envelope.getResponse();其返回值格式是: 1
*若用SoapObject object=(SoapObject)envelope.getResponse()出现程序崩溃现象 待解决
* */
// object=(SoapObject) envelope.bodyIn;
// object=(SoapObject)envelope.getResponse();
object=(Object)envelope.getResponse();
}catch (Exception e) {
e.printStackTrace();
}
loginStateStr=object.toString();
returnloginStateStr;
/*
*之后就是对返回结果值得解析,并进行相应的处理
*/
以上就是客户端的代码,目前还有一个问题是用SoapObject object=(SoapObject)envelope.getResponse()的方式接受返回值是出现程序崩溃现象,接待解决,请各位大婶指教
到此整个服务器端和客户端的代码和部署就全部完成了,代码很少,示例很小,但毕竟是花了自己几天时间摸索出来的贴出来求指教。