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. H TML5 之 (3)转动的圆球

    HTML5 练手之二,一个能够为之圆心转动的圆球,原理和时钟的非常像,只是要把握转动的时间控制,同时加入了点渐变色 HTML5 练手之二,一个能够为之圆心转动的圆球,原理和时钟的非常像,只是要把握转动 ...

  2. [XML] C# XmlHelper操作Xml文档的帮助类 (转载)

    点击下载 XmlHelper.rar 主要功能如下所示 /// <summary> /// 类说明:XmlHelper /// 编 码 人:苏飞 /// 联系方式:361983679 // ...

  3. 微信热修复tinker及tinker server快速接入

    博客: 安卓之家 掘金: jp1017 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 当前热修复方案很多,今天研究了下微信的tinker,使用效果还是不错的,配合tinker serv ...

  4. What's DB2 模式?

    近期负责一个银行方面的项目,需要用到DB2实现多数据库版本切换.初步接触DB2,对于它的管理工具(IBM DATA STUDIO)虽然与ORACLE\MSSQL大同小异,但还是有些东西不一样的.比如什 ...

  5. 分享red hat linux 6上安装oracle11g时遇到的gcc: error trying to exec 'cc1': execvp: No such file or directory的问题处理过程

    安装环境:Red Hat Linux 6.5_x64.oracle11g 64bit 报错详情: 安装到68%时弹窗报错: 调用makefile '/test/app/Administrators/p ...

  6. 如何把visual studio 2010的工程文件迁入TFS2010中管理

    如何在VS2010里面创建项目并添加到TFS2010里面. 新建一个项目,并把它添加到TFS,我们会收到下面的错误: 这是因为我们没有为项目创建Team project,而把它直接添加到了Team p ...

  7. CSS图片去色

    .imgFilter { filter: grayscale(100%); -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); ...

  8. [转载] java中byte数组与int,long,short间的转换

    文章转载自http://blog.csdn.net/leetcworks/article/details/7390731 package com.util; /** * * <ul> * ...

  9. 嵌入式web server——Goahead启用SSL

    前言 之前已经介绍过如何把goahead移植到linux平台,现在再介绍goahead应用SSL的一些关键要点.因为此博文是继承于上一篇关于移植的博文,有不明白的请先回看.移植篇点这里. 移植环境 g ...

  10. Linux权限体系总结

    总结 1.  LINUX9位权限及rwx字符的作用.对应的数字及对应的用户和用户组图解. 2.  rwx对文件来说代表什么意思. 3.  rwx对目录来说代表什么意思. 4.  企业生产环境目录设置权 ...