日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android访问WCF服务(使用json实现参数传递)

發布時間:2024/9/20 Android 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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??
  • {??
  • ????//?注意:?使用“重構”菜單上的“重命名”命令,可以同時更改代碼和配置文件中的類名“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結點下增加如下內容

    [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
  • /**?
  • ?????*?@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服務是否成功通過

    [java]?view plaincopy
  • response.getStatusLine().getStatusCode()?==?HttpURLConnection.HTTP_OK??
  • 即可

    源碼下載:

    WCF服務端.

    Android客戶端.

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

    總結

    以上是生活随笔為你收集整理的Android访问WCF服务(使用json实现参数传递)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。