Android客户端调用Asp.net的WebService
在Android端为了与服务器端进行通信有几种方法:1、Socket通信2、WCF通信3、WebService通信。因为ASP.net中发布WebService非常简单,所以我们选择用WebService来进行通信。在Android端调用.Net的WebService又有两种方法:1、开源的ksoap-2类库进行soap通信2、通过Http请求来调用,我们选择第二种方法,简单快捷。
首先,先准备服务器端,在web.config里面的的system.Web节点添加
<webServices>
<protocols>
<add name= "HttpPost"/>
<add name= "HttpGet"/>
</protocols>
</webServices>
否则通过“WsUrl/方法”的路径访问WebService时会出现“因URL 意外地以“/方法名”结束,请求格式无法识别。执行当前Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。 ”的错误。在IIS中部署网站,分配“8082”端口给该网站,然后在Windows防火墙的“高级设置”中添加“入站规则”,将“8082”端口添加访问权限到入站规则中,如果不添加入站规则,则在打开windows防火墙的情况下局域网内的客户端是不能够通过"http://192.168.1.122:8082"访问到该网站的,会显示“无法打开网页”的错误,因此更不可能通过“http://192.168.1.122:8082/WebServices/TestService.asmx/GetUserList”访问到WebMethod。新建一个名为TestService.asmx的WebService,并在TestService.asmx中新建两个方法,一个带参数,一个不带参数,如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
//using System.Web.Script.Services;//[ScriptMethod(ResponseFormat=ResponseFormat.Json)]所需引用的命名空间
using BLL;
using Model;
namespace Test.WebServices
{
/// <summary>
/// TestService的摘要说明
/// </summary>
[WebService(Namespace = "http://www.testservice.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用ASP.NET AJAX 从脚本中调用此Web 服务,请取消对下行的注释。
[System.Web.Script.Services.ScriptService]//这个属性必须把注释取消掉
public class TestService: System.Web.Services.WebService
{
[WebMethod]
//[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
// [ScriptMethod(ResponseFormat = ResponseFormat.Json)]//不需要该属性,Android端设置Http头的Content-Type为application/json即可返回JSON数据格式给客户端
public List<ModelUser> GetUserList()
{
BLLUser bllUser = new BLLUser();
return bllUser.GetModelList();
}
[WebMethod]
//[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public ModelUser GetUserByUserName(string strUserName)
{
BLLUser bllUser = new BLLUser();
return bllUser.GetModel(strUserName);
}
}
public class ModelUser
{
public string UserName{get;set;};
public string Password{get;set;};
}
}
www.zzzyk.com
ASP.net服务器端的的代码准备好之后开始编写Android客户端的代码,如下:
package com.wac.Android.TestService;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Button;
public class TestServiceActivity extends Activity {
private static final String TAG = "TestService";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
OnClickListener listener = new OnClickListener() {
public void onClick(View v) {
try {
//1、调用不带参数的WebMethod
final String
补充:移动开发 , Android ,