Android调用C#写的WebService

学习自:

http://www.cnblogs.com/kissazi2/p/3406662.html

运行环境

Win10

VS 2015

Android Studio 2.2.3

KSOAP2的Jar包

Overview

众所周知,符合W3C标准的,HTTP协议、SOAP 协议等,是没有语言和平台的限制的。因为实际需要我们可能有时候要调用C#编写的WebService,这里我们需要添加一个Jar包的依赖。

[KSOAP2点击下载](http://pan.baidu.com/s/1skKjvYX)

需要了解的一些信息

我们的WebService,建立以后,这么一个地址用来存放我们WebService的一些描述的信息。http://localhost:54603/NBAWebService.asmx?wsdl

需要了解的信息

  1. WebService 命名空间
  2. 要执行的方法名
  3. SOAPAction
  4. SOAP 的版本.

Note:

  • 因为涉及到了网络,一定要在子线程中使用。
  • 访问网络需要加上网络权限。
  • 传递参数的时候,参数的名称和顺序不能乱掉。

WebService的代码

我们将以下面的HelloWorld方法为例子

namespace NBAWebService
{
/// <summary>
/// Summary description for NBAWebService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class NBAWebService : System.Web.Services.WebService
{ public MyLinqDataContext mldc = MethodHelper.GetLinq(); [WebMethod]
public string HelloWorld()
{
return "Hello World";
} //****************************
}
}

Android端调用代码


/*
* 用来调用C#的WebService
* */
public class ConnectionWebService {
//WebService的地址
//10.0.2.2 该地址是我们,android模拟器访问本机时使用的IP地址
static final String URI = "http://10.0.2.2:8088/NBAWebService.asmx";
//WebService 的命名空间
static final String NAMESPACE = "http://tempuri.org/"; /*
* 调用WebService的方法
* */
public static String callMethod(String methodName, Map<String, String> parameterMap) throws IOException, XmlPullParserException {
/*
* SOAP的对象
* namespace: 调用的命名空间
* method name = 调用的方法名
* */
SoapObject soapObject = new SoapObject(NAMESPACE, methodName); if (parameterMap != null) {
//给SOAP对象传入我们需要的参数
for (Map.Entry<String, String> item : parameterMap.entrySet()) {
soapObject.addProperty(item.getKey(), item.getValue());
}
} //设置我们的 WebService的SOAP版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12); envelope.bodyOut = soapObject;
//与.net兼容
envelope.dotNet = true; //调用方法
HttpTransportSE httpTransportSE = new HttpTransportSE(URI); httpTransportSE.call(NAMESPACE + "/" + methodName, envelope); //获取到返回值
SoapPrimitive sp = (SoapPrimitive) envelope.getResponse();
return sp.toString();
}
}
分析

这是我们调用这个WebService是使用的基本上不会改变的参数

	 //WebService的地址
//10.0.2.2 该地址是我们,android模拟器访问本机时使用的IP地址
static final String URI = "http://10.0.2.2:8088/NBAWebService.asmx";
//WebService 的命名空间
static final String NAMESPACE = "http://tempuri.org/";

我们方法传递的参数

  • methodName 需要调用的WebService的方法名
  • parameterMap 方法所需要的参数 格式为 key = 参数的名称 value = 参数的值
public static String callMethod(String methodName, Map<String, String> parameterMap) throws IOException, XmlPullParserException

指定WebService命名控件和需要调用的方法

/*
* SOAP的对象
* namespace: 调用的命名空间
* method name = 调用的方法名
* */
SoapObject soapObject = new SoapObject(NAMESPACE, methodName);

添加参数, parameterMap 为null 那么就表明该方法不需要参数。

if (parameterMap != null) {
//给SOAP对象传入我们需要的参数
for (Map.Entry<String, String> item : parameterMap.entrySet()) {
soapObject.addProperty(item.getKey(), item.getValue());
}
}

SOAP的请求信息,该信息是由SoapSerializationEnvelope 对象描述的。

//设置我们的 WebService的SOAP版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12); envelope.bodyOut = soapObject;
//与.net兼容
envelope.dotNet = true;

创建HTTPTransportsSE 对象,构造参数中传递,WebService的URL

call 方法调用我们的WebService方法, 传递我们的SOAPAction和我们的SoapSerializationEnvelope 对象

一般来说 SOAPAction 是 命名空间+"/"+方法名.

 //设置我们的 WebService的URI
//调用方法
HttpTransportSE httpTransportSE = new HttpTransportSE(URI);
httpTransportSE.call(NAMESPACE + "/" + methodName, envelope);

获取到返回值。

//获取到返回值
SoapPrimitive sp = (SoapPrimitive) envelope.getResponse();
return sp.toString();
使用
 @Override
public void run() {
try {
String jsonContent = ConnectionWebService.callMethod("HelloWorld", null);
LogHelper.i(jsonContent);
} catch (Exception e) {
LogHelper.i("报错了");
}
}

Android调用C#的WebService的更多相关文章

  1. Android调用天气预报的WebService简单例子

    下面例子改自网上例子:http://express.ruanko.com/ruanko-express_34/technologyexchange5.html 不过网上这个例子有些没有说明,有些情况不 ...

  2. Android调用.net的webservice服务器接收参数为空的情况

    问题描述:安卓开发中,用Android调用.net开发的wenService时候,从Android客户端传递参数到服务器端,服务器端接收为空 解决方法: 1.设置envelope.dotNet = t ...

  3. Android 学习笔记之WebService实现远程调用+内部原理分析...

    PS:终于可以抽出时间写写博客了,忙着学校的三周破实训外加替考...三周了,没怎么学习...哎... 学习内容: 1.WebService 实现远程方法的调用   什么是WebService...   ...

  4. Android调用WebService(转)

    Android调用WebService WebService是一种基于SOAP协议的远程调用标准,通过 webservice可以将不同操作系统平台.不同语言.不同技术整合到一块.在Android SD ...

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

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

  6. 纠正网上乱传的android调用Webservice方法。

    1.写作背景: 笔者想实现android调用webservice,可是网上全是不管对与错乱转载的文章,结果不但不能解决问题,只会让人心烦,所以笔者决定将自己整理好的能用的android调用webser ...

  7. Android调用Web服务

    现在大部分应用程序都把业务逻辑处理,数据调用等功能封装成了服务的形式,应用程序只需要调用这些web服务就好了,在这里就不赘述web服务的优点了.本文总结如何在android中调用Web服务,通过传递基 ...

  8. Android调用Asp.net Web Service示例

    WebService代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; u ...

  9. Android调用Java WebSevice篇之一

    一.服务端WebService 1.服务端环境配置          MyEclipse 10.0.Tomcat6.0.JDK6.0. 2.下载axis相关jar包. 3.创建webservice. ...

随机推荐

  1. vue_列表渲染

    vue列表渲染 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...

  2. D - Balanced Ternary String (贪心)

    题目链接:http://codeforces.com/contest/1102/problem/D 题目大意:给你一个字符串,这个字符串是由0,1,2构成的,然后让你替换字符,使得在替换的次数最少的前 ...

  3. Pool thread stack traces: Thread[C3P0PooledConnectionPoolManager[identityToken->原因解决办法

    今天本地连接测试库测试,发现早上还是好的,下午就崩了,报这个错,使用的是c3po连接池: , 纠结了好久,发现是数据库连接用光了,很多人都在连,果断换了本地库,好使了,看百度说把macPoolSizz ...

  4. flask基础之请求处理核心机制(五)

    前言 总结一下flask框架的请求处理流程. 系列文章 flask基础之安装和使用入门(一) flask基础之jijia2模板使用基础(二) flask基础之jijia2模板语言进阶(三) flask ...

  5. Linux内存初始化【转】

    转自:http://www.cnblogs.com/super-king/p/3291120.html start_kernel -> setup_arch 在这个函数中我们主要看这几个函数. ...

  6. Linux学习笔记-Linux系统简介

    Linux学习笔记-Linux系统简介 UNIX与Linux发展史 UNIX是父亲,Linux是儿子. UNIX发行版本 操作系统 公司 硬件平台 AIX IBM PowerPC HP-UX HP P ...

  7. springquartz的LocalDataSourceJobStore

    spring 为quartz 提供了一个 继承 JobStoreCMT的 LocalDataSourceJobStore,主要是为了和spring更好的集成. public class LocalDa ...

  8. 如何同步删除svn管理的package包目录

    转:https://blog.csdn.net/shiwodecuo/article/details/51754598 eclipse在实际的开发中,当我们的项目由svn进行管理时,若想删除选中的整个 ...

  9. maven学习--生命周期

    clean --清理项目 default --构建项目(最核心)  ===========compile , test , package , install site --生成项目站点

  10. 学习shell脚本之前的基础知识

    日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位 ...