项目中要使用Android调用C#写的WebService,VS2012中写一个测试后台服务,另外,soap这个j包是必须要的,还有一些额外的信息比如soap的版本号这里版本号在源码中已附加
1、先来一个Webservice测试简单用例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace testAndroidCall
{
/// <summary>
/// WebService1 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
public class WebService1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
public string EchoMessage(string msg)
{
return msg;
}
}
}
这里需要将 ksoap2-android-assembly-2.4-jar-with-dependencies.jar 包复制到Eclipse工程的lib目录中,当然也可以放在其他的目录里。同时在Eclipse工程中引用这个jar包。
2、Android 部分来了
(1) 在AdroidManifest.xml中加入权限,<manifest>节点里面加入下面这句话
<!-- 访问网络的权限 -->
<uses-permission android:name="android.permission.INTERNET" />
(2)按钮效果
private void initBtn() {
View btnHelloWorld = this.findViewById(R.id.btnHelloWorld);
btnHelloWorld.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Map<String, String> values = new HashMap<String, String>();
values.put("msg", "这是Android手机发出的信息");
Request(METHOD_HELLO_WORLD);
}
});
View btnEchoMessage = this.findViewById(R.id.btnEchoMessage);
btnEchoMessage.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Map<String, String> values = new HashMap<String, String>();
values.put("msg", "这是Android手机发出的信息");
Request(METHOD_ECHO_MESSAGE,values);
}
});
}
在这个方法中,主要应用了AsyncTask来处理WebService的调用,因为调用WebService是网络操作,可能会比较耗时,在Android3.0以上,已经不允许在UI线程直接进行网络操作,另外,AsyncTask还可以直接更新UI上的控件。
/**
* 执行异步任务
*
* @param params
* 方法名+参数列表(哈希表形式)
*/
public void Request(Object... params) {
new AsyncTask<Object, Object, String>() {
protected String doInBackground(Object... params) {
if (params != null && params.length == 2) {
return CallWebService((String) params[0],
(Map<String, String>) params[1]);
} else if (params != null && params.length == 1) {
return CallWebService((String) params[0], null);
} else {
return null;
}
}
protected void onPostExecute(String result) {
if (result != null) {
tvMessage.setText("服务器回复的信息 : " + result);
}
};
}.execute(params);
}Android端源代码:点击下载
Webservice端源代码:点击下载