Android调用C#的WebService
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需要了解的信息
- WebService 命名空间
- 要执行的方法名
- SOAPAction
- 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的更多相关文章
- Android调用天气预报的WebService简单例子
下面例子改自网上例子:http://express.ruanko.com/ruanko-express_34/technologyexchange5.html 不过网上这个例子有些没有说明,有些情况不 ...
- Android调用.net的webservice服务器接收参数为空的情况
问题描述:安卓开发中,用Android调用.net开发的wenService时候,从Android客户端传递参数到服务器端,服务器端接收为空 解决方法: 1.设置envelope.dotNet = t ...
- Android 学习笔记之WebService实现远程调用+内部原理分析...
PS:终于可以抽出时间写写博客了,忙着学校的三周破实训外加替考...三周了,没怎么学习...哎... 学习内容: 1.WebService 实现远程方法的调用 什么是WebService... ...
- Android调用WebService(转)
Android调用WebService WebService是一种基于SOAP协议的远程调用标准,通过 webservice可以将不同操作系统平台.不同语言.不同技术整合到一块.在Android SD ...
- Android Studio 2.3.3 调用asp.net webService实战(拒绝忽悠)
1.路径中不能包含localhost(本来想在本机调试,就是不行,没办法发布到远程服务器) 2.必须采用异步的办法(阻塞主线程的是肯定不行了) 3.以下是全部的源代码(毫不保留) package co ...
- 纠正网上乱传的android调用Webservice方法。
1.写作背景: 笔者想实现android调用webservice,可是网上全是不管对与错乱转载的文章,结果不但不能解决问题,只会让人心烦,所以笔者决定将自己整理好的能用的android调用webser ...
- Android调用Web服务
现在大部分应用程序都把业务逻辑处理,数据调用等功能封装成了服务的形式,应用程序只需要调用这些web服务就好了,在这里就不赘述web服务的优点了.本文总结如何在android中调用Web服务,通过传递基 ...
- Android调用Asp.net Web Service示例
WebService代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; u ...
- Android调用Java WebSevice篇之一
一.服务端WebService 1.服务端环境配置 MyEclipse 10.0.Tomcat6.0.JDK6.0. 2.下载axis相关jar包. 3.创建webservice. ...
随机推荐
- OI刷题录——hahalidaxin
16-3-25 —— bzoj 2049 [Sdoi2008]Cave 洞穴勘测:LCT入门 bzoj 2002 [Hnoi2010]Bounce 弹飞绵羊:LCT Tsinsen A1303. t ...
- Shell编写8点建议
这八个建议,来源于键者几年来编写 shell 脚本的一些经验和教训.事实上开始写的时候还不止这几条,后来思索再三,去掉几条无关痛痒的,最后剩下八条.毫不夸张地说,每条都是精挑细选的,虽然有几点算是老生 ...
- Linux中断处理驱动程序编写【转】
转自:http://blog.163.com/baosongliang@126/blog/static/1949357020132585316912/ 本章节我们一起来探讨一下Linux中的中断 中断 ...
- 13-6_mysql索引_1_Mysql_Learning_Notes_20180719_13-6
mysql索引_1_Mysql_Learning_Notes 二分查找/折半查找法,binary search 一种在有序数组中查找某一特定元素的搜索算法; 二分查找法的优点是比较少次数,查找速度快, ...
- Nginx - 日志格式及输出
1. 前言 在 Nginx 服务器中,如果想对日志输出进行控制还是很容易的.Nginx 服务器提供了一个 HttpLogModule 模块,可以通过它来设置日志的输出格式. 2. HttpLogMod ...
- tf.metrics.accuracy ==>坑货
tf.metrics.accuracy输出两个值,第一个值为上几步的平均精度,第二值是上几步与该步的精度的平均值. 正常的计算单个batch正确率的代码 self.correct_prediction ...
- BatchNorm caffe源码
1.计算的均值和方差是channel的 2.test/predict 或者use_global_stats的时候,直接使用moving average use_global_stats 表示是否使用全 ...
- 牛客红包OI赛 C 小可爱表白
据说是个公式题. Code #include<cstdio> #include<cstring> #include<algorithm> using namespa ...
- GLOBAL_NAMES参数研究
最近在配置Stream时,发现必须要把GLOBAL_NAMES参数的指设置为TRUE,具体原因为何不知.但是发现在设置了该参数之后,数据库每天的物化视图刷新出现了问题.之后查明原因,是DBLINK出现 ...
- Trie树子节点快速获取法
今天做了一道leetcode上关于字典树的题:https://leetcode.com/problems/word-search-ii/#/description 一开始坚持不看别人的思路,完全自己写 ...