Android访问WCF服务(使用json实现参数传递)
2012-09-18 22:53
417 查看
经过多日努力, 终于勉强弄明白了Android访问WCF服务的方法.
服务端实现
一,
实现服务.
操作契约
实现服务类
修改默认终结点配置
三, 实现自我寄宿
Android客户端实现
在Android客户端需要按照数据契约规定的数据类型实现一个数据类
然后结合实际情况编写事物层代码
以下给出一个带参访问web服务的常见用法
判断访问web服务是否成功通过
即可
源码下载:
WCF服务端.
Android客户端.
服务端实现
一,
实现服务.
操作契约
[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
即可
源码下载:
WCF服务端.
Android客户端.
相关文章推荐
- Android访问WCF服务(使用json实现参数传递)
- SSH框架实现返回json数据,并使用android app进行访问
- Android通过GET和POST方式访问WCF服务(Json)
- android使用JSON进行网络数据交换(服务端、客户端)的实现
- 用NAT123搭建内网WCF服务并实现安卓APP访问附带站点简单的性能测试
- 使用WCF实现SOA面向服务编程——使用AJAX+WCF服务“.NET技术”页面开发
- Ubuntu小技巧9——使用Samba服务实现Windows和Linux文件访问
- Android 下使用 JSON 实现 HTTP 请求,外加几个示例!
- 使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
- 使用GCM服务(Google Cloud Messaging)实现Android消息推送
- 使用Google Cloud Messaging (GCM)服务实现Android消息推送
- 使用W“.NET技术”CF实现SOA面向服务编程——简单的WCF开发实例
- 使用GCM服务(Google Cloud Messaging)实现Android消息推送
- Android的数据处理:使用annotation实现JSON字符串解析为java对象
- Android 下使用 JSON 实现 HTTP 请求
- Android与Servlet交互:Android访问Servlet,并使用解析传回来的Json数据
- Android--使用AIDL和远程服务实现线程通信
- Android 下使用 JSON 实现 HTTP 请求
- 客户端使用自定义代理类访问WCF服务
- Android中如何使用HttpURLConnection实现GET POST JSON数据与下载图片