webservice与android实现通信.docx
《webservice与android实现通信.docx》由会员分享,可在线阅读,更多相关《webservice与android实现通信.docx(16页珍藏版)》请在冰豆网上搜索。
webservice与android实现通信
通过webservice与android实现通信(C#与android)
我用的系统是win7,开发环境是vs2008eclipse3.5,当然eclipse需要安装android的插件。
这里我就不说如何搭建了,大家不懂的可以去http:
//www.mars-droidcm/android-mars论坛找找,有视频前几集就是教你如何搭建环境。
假设你们已经拥有vs2008以及eclipse。
首先第一步先让我们搭建webservice服务端。
实现了复杂数据的返回,以及解析。
但是android不能发送复杂数据给webservice,当然webservice也不能穿复杂数据的参数。
这也是webservice规定的,算是不足之处吧。
1、启动vs,新建一个ASP.NETWeb服务应用程序。
下面的默认名称就是webservice1。
我们新建一个程
序名字就叫webservice2android。
webservices代码如下:
usingSystem;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.Services;
usingSystem.Web.Services.Protocols;
usingSystem.Xml.Linq;
usingwebservice2android;///必须应用自己的namespace
namespacewebservice2android
{
publicclassAdmin
{
privateintid;
publicintId
{
get{returnid;}
set{id=value;}
}
privatestringusername;
publicstringUsername
{
get{returnusername;}
set{username=value;}
}
privatestringpassword;
publicstringPassword
{
get{returnpassword;}
set{password=value;}
}
}
///
///Service1的摘要说明
///
[WebService(Namespace="http:
//tempuri.org/")]
[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
//若要允许使用ASP.NETAJAX从脚本中调用此Web服务,请取消对下行的注释。
//[System.Web.Script.Services.ScriptService]
publicclassService1:
System.Web.Services.WebService
{
[WebMethod]
publicstringHelloWorld()
{
return"HelloWorld";
}
[WebMethod]
[System.Xml.Serialization.XmlInclude(typeof(Admin))]///添加Admin到XmlInclude
publicArrayListgetData()
{
ArrayListlist=newArrayList();
for(inti=0;i<10;i++)
{
Adminadmin=newAdmin();
admin.Id=i;
admin.Username="admin"+i;
admin.Password="admin"+i;
list.Add(admin);
}
returnlist;
}
}
}
2、由于android访问webservice时,需要用到ip服务信息,以及域名,但是当vs启动webservice时,他的ip以及端口号都是随机的,这样android就不能访问该服务。
所以我们在这里需要绑定我们的ip以及端口号
。
A、首先我们打开win7的控制面板。
B、打开程序与功能。
C、打开打开或关闭windows功能。
D、找到Internet信息服务,展开文件夹。
再找到Web管理工具,展开你会发现4个关于iis的文件夹。
你将这四个文件夹都选中对号.。
E、单击确定。
这里需要等待一些时间。
F、打开控制面板,找到管理工具。
G、然后打开Internet信息服务(IIS)管理器
H、展开计算机名-pc(),选择网站,右击添加网站
I、输入网站名称,我这里写的是test
J、到计算机中创建一个目录,该目录用来放你发布的webservice用的。
我建在了D盘的根目录下。
K、将建好的路径放到物理路径中。
点击确定就行了。
L、浏览DefaultWebSite网站,将iisstart.htm文件复制,然后到test网站下浏览,再将他粘贴上去。
最好修改一下,这样可以和我们默认的做一区别,防止混淆。
M、将DefaultWebSite网站停止,然后打开test网站。
N、关闭为windows防火墙,或者允许该程序通过。
O、这是你在同网下的电脑里输入你的ip,将会看到你的iisstart.htm页面,这就说明你成了。
这是我的页面。
3、我们将建好的webservice发布在网上。
A、右击项目选择发布
目标位置:
就是我们iis服务的网站文件夹。
然后点击发布。
B、然后F5启动vs,此时浏览器将自动打开。
C、将地址栏里的localhost:
xxx改为你的计算机ip(不用加端口)。
例如我的:
http:
//192.168.0.108/Service1.asmx
然后,回车。
页面就会不改变的。
只要连接到你的计算机的电脑在浏览器中输入该地址,会和你看到的一样的。
D、记下上面的地址。
(当然你的就是你自己的ip信息了)我们在android端要用到的。
还有我们的域名:
就是默认的http:
//tempuri.org/。
还需要记住方法名HelloWord,和getData。
以及参数的类型和参数名。
3、创建android项目,我建的项目名称叫做:
AndroidWsTest2.2
注意项目需要两个jar包。
在网上能下载到。
新建一个包,比如webservices.util常见类叫做:
WebserviceUtiler
代码如下:
packagewebservice.util;
importjava.io.IOException;
importjava.util.HashMap;
importorg.ksoap2.SoapEnvelope;
importorg.ksoap2.serialization.SoapObject;
importorg.ksoap2.serialization.SoapSerializationEnvelope;
importorg.ksoap2.transport.AndroidHttpTransport;
importorg.ksoap2.transport.HttpTransportSE;
importorg.xmlpull.v1.XmlPullParserException;
/**
*
*@authorytzn
*WebServicesandroid客户端
*/
publicclassWebserviceUtiler{
privateStringnameSpace;//域名
privateStringmethodName;//方法名
privateStringurl;//服务器发布的ip信息
privateStringsoapAction;//应用程序字符串
privateStringmethodNames[];//参数名
privateObjectmethodValues[];//参数值
privateintmethodLenth=0;//参数个数
privateHashMapmaps;//装在参数的map
/**
*
*@paramnameSpace域名http:
//ytzn.test/
*@parammethodName方法名Add
*@paramurl服务器发布的ip信息http:
//192.168.0.108/Service1.asmx
*@parammethodNames参数变量StringmethodNames[]=newString[]{"x","y","z"};
*@parammethodValues参数值ObjectmethodValues[]=newObject[]{9,14,8};
*/
publicWebserviceUtiler(StringnameSpace,StringmethodName,Stringurl,
String[]methodNames,Object[]methodValues){
super();
this.nameSpace=nameSpace;
this.methodName=methodName;
this.url=url;
this.methodNames=methodNames;
this.methodValues=methodValues;
this.soapAction=this.nameSpace+this.methodName;
this.maps=newHashMap();
}
/**
*加载参数
*@returnboolean
*/
privatebooleanisMethodMapsOk(){
intlenthN=methodNames.length;
intlenthV=methodValues.length;
if(lenthN!
=lenthV){
returnfalse;
}else{
for(inti=0;imaps.put(methodNames[i],methodValues[i]);
}
this.methodLenth=methodValues.length;
returntrue;
}
}
/*