Android访问WCF服务(使用json实现参数传递)
经过多日努力, 终于勉强弄明白了Android访问WCF服务的方法.
服务端实现
一, 实现服务.
操作契约
- [ServiceContract]
- public interface IService
- {
- [OperationContract]
- [WebInvoke(
- BodyStyle = WebMessageBodyStyle.WrappedRequest,
- ResponseFormat = WebMessageFormat.Json,
- RequestFormat = WebMessageFormat.Json)]
- string getMsg();
- [OperationContract]
- [WebInvoke(
- BodyStyle = WebMessageBodyStyle.WrappedRequest,
- ResponseFormat = WebMessageFormat.Json,
- RequestFormat = WebMessageFormat.Json)]
- string setMsg(string msg);
- [OperationContract]
- [WebInvoke(
- BodyStyle = WebMessageBodyStyle.WrappedRequest,
- ResponseFormat = WebMessageFormat.Json,
- RequestFormat = WebMessageFormat.Json)]
- Data getData();
- [OperationContract]
- [WebInvoke(
- BodyStyle = WebMessageBodyStyle.WrappedRequest,
- ResponseFormat = WebMessageFormat.Json,
- RequestFormat = WebMessageFormat.Json)]
- Data setData(Data data);
- }
以上的服务包含了不带参数和带参数访问的形式. 其中Data类的定义如下
- [DataContract]
- public class Data
- {
- [DataMember (Name = "Name")]
- public string Name { get; set; }
- [DataMember(Name = "age")]
- public int age { get; set; }
- [DataMember(Name = "msg")]
- public string msg { get; set; }
- [DataMember(Name = "array")]
- public string[] array { get; set; }
- }
实现服务类
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Runtime.Serialization;
- using System.ServiceModel;
- using System.Text;
- namespace Host
- {
- // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Service”。
- public class Service : IService
- {
- #region IService Members getMsg
- public string getMsg()
- {
- Console.WriteLine("getMsg service has bean statred!");
- return string.Format("现在服务器时间{0}", DateTime.Now);
- }
- #endregion
- #region IService Members setMsg
- public string setMsg(string msg)
- {
- Console.WriteLine("setMsg service has bean started!");
- return string.Format("现在服务器时间{0}, 消息内容{1}", DateTime.Now, msg);
- }
- #endregion
- #region IService Members getData
- public Data getData()
- {
- Console.WriteLine("getData service has bean started!");
- Data data = new Data();
- data.Name = "Mush Service";
- data.age = 20;
- data.msg = "This is a data form service_HelloData";
- data.array = new string[3] { "string1", "string2", "string3" };
- return data;
- }
- #endregion
- #region IService Members setData
- public Data setData(Data data)
- {
- Console.WriteLine("setData service has bean started!");
- data.msg = "This MSG has bean changed by service!!!";
- return data;
- }
- #endregion
- }
- }
二, 配置服务
在配置文件的behaviors结点下增加如下内容
- <endpointBehaviors>
- <behavior name="json">
- <enableWebScript />
- </behavior>
- </endpointBehaviors>
修改默认终结点配置
- <endpoint binding="webHttpBinding" contract="Host.IService" behaviorConfiguration="json">
- <identity>
- <dns value="localhost"/>
- </identity>
- </endpoint>
三, 实现自我寄宿
- static void Main(string[] args)
- {
- using (ServiceHost host = new ServiceHost(typeof(Host.Service)))
- {
- host.Open();
- Console.WriteLine("Host is started!!! Press any ENTER to stop.");
- Console.ReadLine();
- host.Close();
- }
- }
Android客户端实现
在Android客户端需要按照数据契约规定的数据类型实现一个数据类
- public class Data {
- private String Name;
- private int age;
- private String msg;
- private String[] array;
- public String getName() {
- return Name;
- }
- public void setName(String name) {
- Name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getMsg() {
- return msg;
- }
- public void setMsg(String msg) {
- this.msg = msg;
- }
- public String[] getArray() {
- return array;
- }
- public void setArray(String[] array) {
- this.array = array;
- }
- }
然后结合实际情况编写事物层代码
以下给出一个带参访问web服务的常见用法
- /**
- * @param url 服务的完整地址
- * @param data 数据对象
- * @param contentType Request的ContentType
- * @return 返回的json字符串
- */
- public String doPost(String url, Data data, String contentType) {
- String strResp = "";
- HttpPost request = new HttpPost(url);
- request.setHeader("Accept", "application/json");
- request.setHeader("Content-type", "application/json");
- // 组织json
- JSONStringer vehicle;
- try {
- vehicle = new JSONStringer().object().key("data").object()
- .key("Name").value(data.getName()).key("age").value(data.getAge())
- .key("array").value(data.getArray()).key("msg").value(data.getMsg())
- .endObject().endObject();
- StringEntity entity = new StringEntity(vehicle.toString());
- request.setEntity(entity);
- // 向WCF服务发送请求
- DefaultHttpClient httpClient = new DefaultHttpClient();
- HttpResponse response = httpClient.execute(request);
- // 判断是否成功
- if (response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK)
- strResp = EntityUtils.toString(response.getEntity());
- Log.d("WebInvoke", "Saving : "
- + response.getStatusLine().getStatusCode());
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- // Reload plate numbers
- return strResp;
- }
判断访问web服务是否成功通过
- response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK
即可
源码下载:
http://blog.csdn.net/btyh17mxy/article/details/7993111
Android访问WCF服务(使用json实现参数传递)的更多相关文章
- Android访问WCF服务
原文链接:http://www.cnblogs.com/VinC/archive/2011/02/24/1964049.html 本章目的: 用Wcf建立可以上Android可以访问的数据服务, 数据 ...
- ajax调用handler,使用HttpWebRequest访问WCF服务
引言 随着手机及移动设备的普及,移动端的应用也进入了热潮.以前PC端的门户网站,大多也均推出了适配移动设备的网站或者APP,再差的也注册了个公众号.在移动应用开发中,目前据我所了解到的解决方案有:1. ...
- 客户端使用自定义代理类访问WCF服务 z
通常在客户端访问WCF服务时,都需要添加服务引用,然后在客户端app.config或 web.config文件中产生WCF服务的客户端配置信息.若是每添加一个服务都是这样做,这样势必会将比较麻烦,能否 ...
- 客户端使用自定义代理类访问WCF服务
通常在客户端访问WCF服务时,都需要添加服务引用,然后在客户端app.config或web.config文件中产生WCF服务的客户端配置信息.若是每添加一个服务都是这样做,这样势必会将比较麻烦,能否简 ...
- jQuery调用WCF服务传递JSON对象
下面这个示例使用了WCF去创建一个服务端口从而能够被ASP.Net页面通过jQuery的AJAX方法访问,我们将在客户端使用Ajax技术来 与WCF服务进行通信.这里我们仅使用jQuery去连接Web ...
- Ajax跨域访问wcf服务中所遇到的问题总结。
工具说明:vs2012,sql server 2008R2 1.首先,通过vs2012建立一个wcf服务项目,建立好之后.再新开一个vs2012 建立web项目,通过jQuery的ajax方法访问服务 ...
- Wince 中访问WCF服务
由于本文并非WinCE开发普及篇,所以一些WinCE开发和WCF开发的基础还请移步百度和谷歌寻找答案,然后结合本文开发出WinCE中如何访问WCF,谢谢. 开发环境 IDE:Visual Studio ...
- Android访问远程网页取回json数据
php代码 $array = array( 'username'=>'杨铸', 'password'=>'123456', 'user_id'=>);echo json_enc ...
- Android 访问 wcf
IService1.cs 添加的接口 [OperationContract] [WebInvoke(Method = "POST", BodyStyle = WebMessageB ...
随机推荐
- Qt Creator : Read an image from resources
最近两周碰到的一个问题是: opencv无法读取qt中的资源文件. 参考网址:https://stackoverflow.com/questions/45233559/qt-creator-read- ...
- Python——数据类型之list、tuple
本篇主要内容 • list初识 • list元素的访问 • list内部所有的方法 • tuple介绍和与list用法的比较 我觉得Python里面用的最多的就是List了,感觉好强大.他能存 ...
- Python——初识Python
本篇主要内容: • Python的特点 • Python的种类 • Python的编码 • Python的安装环境推荐 • Python的基础用法:输入输出,算术运算符,逻辑运算符,基本程序结构语法 ...
- c++ object model
对一个结构体进行不断的封装后可以形成一个c++类,为此需要添加很多函数成员之类的代码,为此显示c++比c语言显得庞大并且迟缓,但是事实并不是这些 c++在布局和时间上的额外承担主要是由virtual引 ...
- hdu1576逆元的一道水题
hdu 1576 Problem Description 要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1). ...
- Java String.intern()_学习笔记
参考:https://www.jianshu.com/p/0d1c003d2ff5 String.intern() String.intern()是native方法,底层调用c++中的StringTa ...
- vue cli & vue 3.x
vue cli & vue 3.x https://cli.vuejs.org/dev-guide/ui-api.html#ui-api https://cli.vuejs.org/zh/gu ...
- 【bzoj2324】[ZJOI2011]营救皮卡丘 最短路-Floyd+有上下界费用流
原文地址:http://www.cnblogs.com/GXZlegend/p/6832504.html 题目描述 皮卡丘被火箭队用邪恶的计谋抢走了!这三个坏家伙还给小智留下了赤果果的挑衅!为了皮卡丘 ...
- Codeforces Round #389 (Div. 2) 752E(二分答案)
题目大意 可以理解成有n个木板,可以选取木板将其劈成2半(如果长度是奇数,就切成x和x+1),切完之后还可以再切 然后你要把这n个木板切成更多的木板,然后从中选择k个,使得这k个木板的最小长度尽量大 ...
- [hdu] 5696 区间的价值 || 序列分治
原题 我们定义"区间的价值"为一段区间的最大值*最小值. 一个区间左端点在L,右端点在R,那么该区间的长度为(R−L+1). 求长度分别为1-n的区间的最大价值. 保证数据随机 因 ...