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方法为例子

  1. namespace NBAWebService
  2. {
  3. /// <summary>
  4. /// Summary description for NBAWebService
  5. /// </summary>
  6. [WebService(Namespace = "http://tempuri.org/")]
  7. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  8. [System.ComponentModel.ToolboxItem(false)]
  9. // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
  10. // [System.Web.Script.Services.ScriptService]
  11. public class NBAWebService : System.Web.Services.WebService
  12. {
  13. public MyLinqDataContext mldc = MethodHelper.GetLinq();
  14. [WebMethod]
  15. public string HelloWorld()
  16. {
  17. return "Hello World";
  18. }
  19. //****************************
  20. }
  21. }

Android端调用代码


  1. /*
  2. * 用来调用C#的WebService
  3. * */
  4. public class ConnectionWebService {
  5. //WebService的地址
  6. //10.0.2.2 该地址是我们,android模拟器访问本机时使用的IP地址
  7. static final String URI = "http://10.0.2.2:8088/NBAWebService.asmx";
  8. //WebService 的命名空间
  9. static final String NAMESPACE = "http://tempuri.org/";
  10. /*
  11. * 调用WebService的方法
  12. * */
  13. public static String callMethod(String methodName, Map<String, String> parameterMap) throws IOException, XmlPullParserException {
  14. /*
  15. * SOAP的对象
  16. * namespace: 调用的命名空间
  17. * method name = 调用的方法名
  18. * */
  19. SoapObject soapObject = new SoapObject(NAMESPACE, methodName);
  20. if (parameterMap != null) {
  21. //给SOAP对象传入我们需要的参数
  22. for (Map.Entry<String, String> item : parameterMap.entrySet()) {
  23. soapObject.addProperty(item.getKey(), item.getValue());
  24. }
  25. }
  26. //设置我们的 WebService的SOAP版本
  27. SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
  28. envelope.bodyOut = soapObject;
  29. //与.net兼容
  30. envelope.dotNet = true;
  31. //调用方法
  32. HttpTransportSE httpTransportSE = new HttpTransportSE(URI);
  33. httpTransportSE.call(NAMESPACE + "/" + methodName, envelope);
  34. //获取到返回值
  35. SoapPrimitive sp = (SoapPrimitive) envelope.getResponse();
  36. return sp.toString();
  37. }
  38. }
分析

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

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

我们方法传递的参数

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

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

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

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

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

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

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

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

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

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

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

获取到返回值。

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

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. FPGA基础知识8(FPGA静态时序分析)

    任何学FPGA的人都跑不掉的一个问题就是进行静态时序分析.静态时序分析的公式,老实说很晦涩,而且总能看到不同的版本,内容又不那么一致,为了彻底解决这个问题,我研究了一天,终于找到了一种很简单的解读办法 ...

  2. 搭建zookeeper单机版以及简单命令的使用

    1:创建目录 #数据目录dataDir=/opt/hadoop/zookeeper-3.3.5-cdh3u5/data#日志目录dataLogDir=/opt/hadoop/zookeeper-3.3 ...

  3. MySQL Sakila样本数据库

    Sakila样本数据库介绍 Sakila样本数据库是MySQL官方提供的一个模拟DVD租赁信息管理的数据库,提供了一个标准模式,可作为书中例子,教程.文章.样品,等等,对学习测试来说是个不错的选择. ...

  4. [转]STL 容器一些底层机制

    1.vector 容器 vector 的数据安排以及操作方式,与 array 非常相似.两者的唯一区别在于空间的运用的灵活性.array 是静态空间,一旦配置了就不能改变,vector 是动态数组.在 ...

  5. 【FCS NOI2018】福建省冬摸鱼笔记 day6【FJOI 2018】福建省选混分滚蛋记 day1

    记录一下day6发生的事情吧. 7:30 到达附中求索碑,被人膜,掉RP. 7:50 进考场,6楼的最后一排的最左边的位置,世界上最角落的地方,没有任何想法. 发现电脑时间和别人不一样,赶快调了一下. ...

  6. libevent简介和使用【转】

    转自:http://www.open-open.com/lib/view/open1386510630330.html libevent是一个基于事件触发的网络库,memcached底层也是使用lib ...

  7. Shell脚本中字符串判空:使用-z 字符串长度为0时,为真,-n字符串长度不为0,为真。这两个都不靠谱【转】

    最近发现使用  -z   和  -n  来判断字符串判空,或不空时,很不靠谱. 使用下面的方法最可靠: if [ "x${value}" == "x" ]    ...

  8. MinGw 和 cygwin 的区别和联系

    原创 by zoe.zhang .......................................................... 1. windows与Linux操作系统的不同   ...

  9. 八、springboot整合redis

    整合Redis 一. 注解方式实现添加缓存 1.在pom.xml加入依赖 <!-- 配置使用redis启动器 --> <dependency> <groupId>o ...

  10. GitHub安装和使用

    GitHub是一个基于git的代码托管平台,付费用户可以建私人仓库,一般的免费用户只能使用公共仓库,也就是代码要公开. Github 由Chris Wanstrath, PJ Hyett 与Tom P ...