生活随笔
收集整理的這篇文章主要介紹了
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实现参数传递)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。