生活随笔
收集整理的这篇文章主要介绍了
Android访问WCF服务(使用json实现参数传递)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
经过多日努力, 终于勉强弄明白了Android访问WCF服务的方法.
服务端实现
一, 实现服务.
操作契约
[csharp] view plaincopy
[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类的定义如下
[csharp] view plaincopy
[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; } } 实现服务类
[csharp] view plaincopy
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace Host { 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结点下增加如下内容
[html] view plaincopy
<endpointBehaviors> <behavior name="json"> <enableWebScript /> </behavior> </endpointBehaviors> 修改默认终结点配置
[html] view plaincopy
<endpoint binding="webHttpBinding" contract="Host.IService" behaviorConfiguration="json"> <identity> <dns value="localhost"/> </identity> </endpoint>
三, 实现自我寄宿
[csharp] view plaincopy
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客户端需要按照数据契约规定的数据类型实现一个数据类
[java] view plaincopy
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服务的常见用法
[java] view plaincopy
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"); 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); 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) { e.printStackTrace(); } return strResp; } 判断访问web服务是否成功通过
[java] view plaincopy
response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK 即可
源码下载:
WCF服务端.
Android客户端.
http://blog.csdn.net/btyh17mxy/article/details/7993111
总结
以上是生活随笔为你收集整理的Android访问WCF服务(使用json实现参数传递)的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。