经过多日努力, 终于勉强弄明白了Android访问WCF服务的方法.

服务端实现

一, 实现服务.

操作契约

  1. [ServiceContract]
  2. public interface IService
  3. {
  4. [OperationContract]
  5. [WebInvoke(
  6. BodyStyle = WebMessageBodyStyle.WrappedRequest,
  7. ResponseFormat = WebMessageFormat.Json,
  8. RequestFormat = WebMessageFormat.Json)]
  9. string getMsg();
  10. [OperationContract]
  11. [WebInvoke(
  12. BodyStyle = WebMessageBodyStyle.WrappedRequest,
  13. ResponseFormat = WebMessageFormat.Json,
  14. RequestFormat = WebMessageFormat.Json)]
  15. string setMsg(string msg);
  16. [OperationContract]
  17. [WebInvoke(
  18. BodyStyle = WebMessageBodyStyle.WrappedRequest,
  19. ResponseFormat = WebMessageFormat.Json,
  20. RequestFormat = WebMessageFormat.Json)]
  21. Data getData();
  22. [OperationContract]
  23. [WebInvoke(
  24. BodyStyle = WebMessageBodyStyle.WrappedRequest,
  25. ResponseFormat = WebMessageFormat.Json,
  26. RequestFormat = WebMessageFormat.Json)]
  27. Data setData(Data data);
  28. }

以上的服务包含了不带参数和带参数访问的形式. 其中Data类的定义如下

  1. [DataContract]
  2. public class Data
  3. {
  4. [DataMember (Name = "Name")]
  5. public string Name { get; set; }
  6. [DataMember(Name = "age")]
  7. public int age { get; set; }
  8. [DataMember(Name = "msg")]
  9. public string msg { get; set; }
  10. [DataMember(Name = "array")]
  11. public string[] array { get; set; }
  12. }

实现服务类

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.Serialization;
  5. using System.ServiceModel;
  6. using System.Text;
  7. namespace Host
  8. {
  9. // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Service”。
  10. public class Service : IService
  11. {
  12. #region IService Members getMsg
  13. public string getMsg()
  14. {
  15. Console.WriteLine("getMsg service has bean statred!");
  16. return string.Format("现在服务器时间{0}", DateTime.Now);
  17. }
  18. #endregion
  19. #region IService Members setMsg
  20. public string setMsg(string msg)
  21. {
  22. Console.WriteLine("setMsg service has bean started!");
  23. return string.Format("现在服务器时间{0}, 消息内容{1}", DateTime.Now, msg);
  24. }
  25. #endregion
  26. #region IService Members getData
  27. public Data getData()
  28. {
  29. Console.WriteLine("getData service has bean started!");
  30. Data data = new Data();
  31. data.Name = "Mush Service";
  32. data.age = 20;
  33. data.msg = "This is a data form service_HelloData";
  34. data.array = new string[3] { "string1", "string2", "string3" };
  35. return data;
  36. }
  37. #endregion
  38. #region IService Members setData
  39. public Data setData(Data data)
  40. {
  41. Console.WriteLine("setData service has bean started!");
  42. data.msg = "This MSG has bean changed by service!!!";
  43. return data;
  44. }
  45. #endregion
  46. }
  47. }

二,  配置服务

在配置文件的behaviors结点下增加如下内容

  1. <endpointBehaviors>
  2. <behavior name="json">
  3. <enableWebScript />
  4. </behavior>
  5. </endpointBehaviors>

修改默认终结点配置

  1. <endpoint  binding="webHttpBinding" contract="Host.IService" behaviorConfiguration="json">
  2. <identity>
  3. <dns value="localhost"/>
  4. </identity>
  5. </endpoint>

三, 实现自我寄宿

  1. static void Main(string[] args)
  2. {
  3. using (ServiceHost host = new ServiceHost(typeof(Host.Service)))
  4. {
  5. host.Open();
  6. Console.WriteLine("Host is started!!! Press any ENTER to stop.");
  7. Console.ReadLine();
  8. host.Close();
  9. }
  10. }

Android客户端实现

在Android客户端需要按照数据契约规定的数据类型实现一个数据类

  1. public class Data {
  2. private String Name;
  3. private int age;
  4. private String msg;
  5. private String[] array;
  6. public String getName() {
  7. return Name;
  8. }
  9. public void setName(String name) {
  10. Name = name;
  11. }
  12. public int getAge() {
  13. return age;
  14. }
  15. public void setAge(int age) {
  16. this.age = age;
  17. }
  18. public String getMsg() {
  19. return msg;
  20. }
  21. public void setMsg(String msg) {
  22. this.msg = msg;
  23. }
  24. public String[] getArray() {
  25. return array;
  26. }
  27. public void setArray(String[] array) {
  28. this.array = array;
  29. }
  30. }

然后结合实际情况编写事物层代码

以下给出一个带参访问web服务的常见用法

  1. /**
  2. * @param url 服务的完整地址
  3. * @param data 数据对象
  4. * @param contentType Request的ContentType
  5. * @return 返回的json字符串
  6. */
  7. public String doPost(String url, Data data, String contentType) {
  8. String strResp = "";
  9. HttpPost request = new HttpPost(url);
  10. request.setHeader("Accept", "application/json");
  11. request.setHeader("Content-type", "application/json");
  12. // 组织json
  13. JSONStringer vehicle;
  14. try {
  15. vehicle = new JSONStringer().object().key("data").object()
  16. .key("Name").value(data.getName()).key("age").value(data.getAge())
  17. .key("array").value(data.getArray()).key("msg").value(data.getMsg())
  18. .endObject().endObject();
  19. StringEntity entity = new StringEntity(vehicle.toString());
  20. request.setEntity(entity);
  21. // 向WCF服务发送请求
  22. DefaultHttpClient httpClient = new DefaultHttpClient();
  23. HttpResponse response = httpClient.execute(request);
  24. // 判断是否成功
  25. if (response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK)
  26. strResp = EntityUtils.toString(response.getEntity());
  27. Log.d("WebInvoke", "Saving : "
  28. + response.getStatusLine().getStatusCode());
  29. } catch (Exception e) {
  30. // TODO Auto-generated catch block
  31. e.printStackTrace();
  32. }
  33. // Reload plate numbers
  34. return strResp;
  35. }

判断访问web服务是否成功通过

  1. response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK

即可

源码下载:

WCF服务端.

Android客户端.

http://blog.csdn.net/btyh17mxy/article/details/7993111

Android访问WCF服务(使用json实现参数传递)的更多相关文章

  1. Android访问WCF服务

    原文链接:http://www.cnblogs.com/VinC/archive/2011/02/24/1964049.html 本章目的: 用Wcf建立可以上Android可以访问的数据服务, 数据 ...

  2. ajax调用handler,使用HttpWebRequest访问WCF服务

    引言 随着手机及移动设备的普及,移动端的应用也进入了热潮.以前PC端的门户网站,大多也均推出了适配移动设备的网站或者APP,再差的也注册了个公众号.在移动应用开发中,目前据我所了解到的解决方案有:1. ...

  3. 客户端使用自定义代理类访问WCF服务 z

    通常在客户端访问WCF服务时,都需要添加服务引用,然后在客户端app.config或 web.config文件中产生WCF服务的客户端配置信息.若是每添加一个服务都是这样做,这样势必会将比较麻烦,能否 ...

  4. 客户端使用自定义代理类访问WCF服务

    通常在客户端访问WCF服务时,都需要添加服务引用,然后在客户端app.config或web.config文件中产生WCF服务的客户端配置信息.若是每添加一个服务都是这样做,这样势必会将比较麻烦,能否简 ...

  5. jQuery调用WCF服务传递JSON对象

    下面这个示例使用了WCF去创建一个服务端口从而能够被ASP.Net页面通过jQuery的AJAX方法访问,我们将在客户端使用Ajax技术来 与WCF服务进行通信.这里我们仅使用jQuery去连接Web ...

  6. Ajax跨域访问wcf服务中所遇到的问题总结。

    工具说明:vs2012,sql server 2008R2 1.首先,通过vs2012建立一个wcf服务项目,建立好之后.再新开一个vs2012 建立web项目,通过jQuery的ajax方法访问服务 ...

  7. Wince 中访问WCF服务

    由于本文并非WinCE开发普及篇,所以一些WinCE开发和WCF开发的基础还请移步百度和谷歌寻找答案,然后结合本文开发出WinCE中如何访问WCF,谢谢. 开发环境 IDE:Visual Studio ...

  8. Android访问远程网页取回json数据

    php代码 $array = array(  'username'=>'杨铸',  'password'=>'123456',  'user_id'=>);echo json_enc ...

  9. Android 访问 wcf

    IService1.cs 添加的接口 [OperationContract] [WebInvoke(Method = "POST", BodyStyle = WebMessageB ...

随机推荐

  1. php利用PHPExcel类导出导入Excel用法

    PHPExcel类是php一个excel表格处理插件了,下面我来给大家介绍利用PHPExcel类来导入与导出excel表格的应用方法,有需要了解的朋友不防参考参考(PHPExcel自己百度下载这里不介 ...

  2. java连接Oracle数据库实现增删改查并在Navicat中显示

    创建TEST表 eclipse中的java项目 代码 数据库方法类 DBUtil: package util; import java.sql.Connection; import java.sql. ...

  3. cd,PATH,alias,man,快捷键

    5. cd命令cd 后面不加东西,就是进入到当前用户的家目录cd ~ 这里的~符号也表示用户的家目录cd - 切换到上一次所在的目录cd . .. 其中.表示当前目录, ..表示上一级目录注意区分绝对 ...

  4. 【bzoj4870】[Shoi2017]组合数问题 dp+快速幂/矩阵乘法

    题目描述 输入 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 输出 一行一个整数 ...

  5. 关于CPU位数,OS位数以及内存大小关系的一点总结

    (这个学期做助教,说来好惭愧啊,虽然我也是考研进来的,但是就在两年前复习的资料居然全部都忘光了.对大二的孩子们提问的问题多半都解决不了!!!越来越觉得自己的学习方法有问题了,总是想着一些知识能够根据自 ...

  6. [Codeforces Round #516 (Div. 2, by Moscow Team Olympiad) ](A~E)

    A: 题目大意:给你$a,b,c$三条边,可以给任意的边加任意的长度,求最少共加多少长度使得可以构成三角形 题解:排个序,若可以组成,输出$0$,否则输出$c-a-b+1(设a\leqslant b\ ...

  7. BZOJ1296 [SCOI2009]粉刷匠 【dp】

    题目 windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色. 每个格子最多只能被粉刷 ...

  8. [ CodeVS冲杯之路 ] P1166

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/1166/ 有许久没有刷题了,忙着过中秋去了嘿嘿 首先它的每一行是独立的,我们可以直接把它拆分成 n 互不相关的子问题做 ...

  9. 插件 原生js 省市区 三级联动 源码

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Selenium2+python自动化8-SeleniumBuilder辅助定位元素【转载】

    前言 福利来了,对于用火狐浏览器的小伙伴们,你还在为定位元素而烦恼嘛? 上古神器Selenium Builder来啦,哪里不会点哪里,妈妈再也不用担心我的定位元素问题啦!(但是也不是万能,基本上都能覆 ...