Android客户端调用Asp.net的WebService

我来说两句 |2011-11-23 13:39:15

在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.2cto.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 SERVER_URL = "http://192.168.1.122:8082/WebServices/TestService.asmx/GetUserList";

HttpPost request = new HttpPost(SERVER_URL); // 根据内容来源地址创建一个Http请求

request.addHeader("Content-Type", "application/json; charset=utf-8");//必须要添加该Http头才能调用WebMethod时返回JSON数据

HttpResponse httpResponse = new DefaultHttpClient().execute(request); // 发送请求并获取反馈

// 解析返回的内容

if (httpResponse.getStatusLine().getStatusCode() !=404) //StatusCode为200表示与服务端连接成功,404为连接不成功

{

//因为GetUserList返回的是List<ModelUser>,所以该数据的JSON格式为:

//{"d":[{"__type":"Model.ModelUser","UserName":"wa1","Password":"123"},{"__type":"Model.ModelUser","UserName":"wa2","Password":"123"}]}

String result = EntityUtils.toString(httpResponse.getEntity());

Log.i("result",result);// System.out.println(result);

JSONArray resultArray=new JSONObject(result).getJSONArray("d"); //获取ModelUser类型的JSON对象数组

TextView tv=(TextView)findViewById(R.string.textview1);

tv.setText(((JSONObject)resultArray.get(0)).getString("UserName").toString()); //获取resultArray第0个元素中的“UserName”属性

}

/*

//2、调用带参数的WebMethod

final String SERVER_URL = "http://192.168.1.122:8082/WebServices/TestService.asmx/GetUserByUserName"; // 带参数的WebMethod

HttpPost request = new HttpPost(SERVER_URL); // 根据内容来源地址创建一个Http请求

request.addHeader("Content-Type", "application/json; charset=utf-8");//必须要添加该Http头才能调用WebMethod时返回JSON数据

JSONObject jsonParams=new JSONObject();

jsonParams.put("strUserName", "wa1");//传参,如果想传递两个参数则继续添加第二个参数jsonParams.put("param2Name","param2Value")

HttpEntity bodyEntity =new StringEntity(jsonParams.toString(), "utf8");//参数必须也得是JSON数据格式的字符串才能传递到服务器端,否则会出现"{'Message':'strUserName是无效的JSON基元'}"的错误

request.setEntity(bodyEntity);

HttpResponse httpResponse = new DefaultHttpClient().execute(request); // 发送请求并获取反馈

// 解析返回的内容

if (httpResponse.getStatusLine().getStatusCode() !=404) //StatusCode为200表示与服务端连接成功,404为连接不成功

{

//因为GetUserByUserName返回的是ModelUser,所以该数据的JSON格式为:

//{"d":{"__type":"Model.ModelUser","UserName":"wa1","Password":"123"}}

String result = EntityUtils.toString(httpResponse.getEntity());

Log.i("result",result);

JSONObject resultJSON=new JSONObject(result).getJSONObject("d");//获取ModelUser类型的JSON对象

TextView tv=(TextView)findViewById(R.string.textview1);

tv.setText(resultJSON.getString("UserName").toString());

Log.i("resultJSON",resultJSON);

}

*/

} catch (Exception e) {}

}};

Button button = (Button) findViewById(R.id.button1);

button.setOnClickListener(listener);

}

}

至此,客户端访问服务端的代码已经完成。

摘自 呼噜Zz~的专栏

Android客户端调用Asp.net的WebService的更多相关文章

  1. .net 客户端调用java或.net webservice进行soapheader验证

    .net 客户端调用java或.net webservice进行soapheader验证 最近项目中有业务需要跨平台调用web服务,客户端和服务器之间采用非对称加密来保证数据的安全性,webservi ...

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

    由于项目中要使用Android调用C#写的WebService,于是便有了这篇文章.在学习的过程中,发现在C#中直接调用WebService方便得多,直接添加一个引用,便可以直接使用将WebServi ...

  3. 在Android中调用KSOAP2库访问webservice服务出现的服务端传入参数为null的问题解决

    ksoap2-android-3.0.0-jar 第三方库来调用.net 写的Web Service 如果没有参数,那么调用一切顺利,但是如果服务是带参数的,那么服务端接收的参数都是nul.      ...

  4. Java调用ASP.NET的webservice故障排除

    公司要接入其它公司的一个业务功能,对方是提供的 .net产生的webservice,在用cxf的wsdl2java命令生成客户端的测试代码时,出现了如下故障WSDLToJava Error: Thro ...

  5. 在Android中调用KSOAP2库访问webservice服务出现的服务端返回AnyType{}

    最近在做毕业设计的时候,涉及到了安卓端访问web service服务端数据库,并返回一个值,当我把web service测试通过后,想写一个简单的安卓测试程序,来实现服务端数据库访问,通过web se ...

  6. Android调用基于.net的WebService

    在实际开发项目中,有时候会为Android开发团队提供一些接口,一般是以asmx文件的方式来承载.而公布出去的数据一般上都是标准的json数据.但是在实际过程中,发现Android团队那边并不是通过将 ...

  7. webservice -- cxf客户端调用axis2服务端

    背景: 有个项目, 需要由第三方提供用户信息, 实现用户同步操作, 对方给提供webservice接口(axis2实现)并也使用axis2作主客户端调用我方提供的webservice接口 起初, 由于 ...

  8. [PHP]AES加密----PHP服务端和Android客户端

    本文采取128位AES-CBC模式加密和解密 1.首先对服务端安装mcrypt: sudo apt-get install php5-mcrypt php5-dev sudo php5enmod mc ...

  9. Android Studio 2.3.3 调用asp.net webService实战(拒绝忽悠)

    1.路径中不能包含localhost(本来想在本机调试,就是不行,没办法发布到远程服务器) 2.必须采用异步的办法(阻塞主线程的是肯定不行了) 3.以下是全部的源代码(毫不保留) package co ...

随机推荐

  1. yieId浅谈

    例子:在不使用yieId时,通常我们都会采取先遍历再把元素加到新的List中 using (var reader = SqlHelper.ExecuteReader("")) { ...

  2. 解决IE无法解析json的方法

    一.原始方法eval() 二.json插件--github开源插件:json-js/json2.js https://github.com/douglascrockford/JSON-js/blob/ ...

  3. WPF 启动初始界面

    不经意间发现了wpf的这个小玩意,感觉蛮有意思的.我在项目中添加了一张图片 如图: wpf-1.JPG(10.73 K) 2010-6-6 17:04:47 然后再这张图片的属性中设置它的生成操作为S ...

  4. CentOS 7.0 重置root密码

    步骤一,开机时随便按下键盘,进入以下菜单 步骤二: 选择第一项,按e键进行修改 步骤三,定位到 ro( linux 16 or linuxefi ) 步骤四:把ro改成 “rw init=/sysro ...

  5. [转] 《高性能HTML5》读后整理的Web性能优化内容

    读后感 先说说<高性能HTML5>这本书的读后感吧,个人觉得这本书前两章跟书的标题完全搭不上关系,或者说只能算是讲解了“高性能”这三个字,HTML5完全不见踪影.个人觉得作者应该首先把HT ...

  6. React Native:使用 JavaScript 构建原生应用 详细剖析

    数月前,Facebook 对外宣布了正在开发的 React Native 框架,这个框架允许你使用 JavaScript 开发原生的 iOS 应用——就在今天,Beta 版的仓库释出了! 基于 Pho ...

  7. 配置公网的域名绑定IP

    1. 在万网.美橙申请了一个域名,当然付完费了.   2. 点击"管理",找到了域名解析   3. 点击"域名解析"   注意"记录值",这 ...

  8. jackson学习----解析豆瓣的图书信息

      异常一. org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type [simple ...

  9. (转)Eclipse 下找不到或无法加载主类的解决办法

    转自:http://my.oschina.net/leejun2005/blog/106789,写的太好了! 有时候 Eclipse 会发神经,好端端的 project 就这么编译不了了,连 Hell ...

  10. ruby定时脚本

    ruby定时脚本的实现涉及到三个方面: 要定时执行的代码 定时控制(设置定时的时间) 将脚本后台化 实例: # in func.rb def func # the function body goes ...