• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    REST風格服務在跨平臺數據傳輸中的研究與應用

    2014-07-28 00:42:07熊國華
    電腦知識與技術 2014年16期

    熊國華

    摘要:利用手持設備進行移動辦公已經成為一種趨勢,由于手持設備難以進行大型的數據庫存儲和軟件應用,且手持設備與服務端的平臺與技術也不盡相同,因此相互之間如何進行高效的數據交互就成為亟待解決的問題,針對這一問題,該文在研究WCF與REST風格的基礎上,對Android平臺客戶端與.NET服務端之間的數據交互進行了設計與實現。

    關鍵詞: REST風格服務; WCF ; Android

    中圖分類號:TP309 文獻標識碼:A 文章編號:1009-3044(2014)16-3803-04

    Abstract:Using handheld devices for mobile officing has become a trend. But it is difficult for handheld devices to carry out Large-scale data storage and software application. And these platforms and technologies are not the same Between the handheld device and server. However it had been a problem of desiderate to solve that how to make an efficient data exchange m between them. For this case, this paper research WCF and REST style services, then the data exchange between Android Client and .NET Server is designed and realized.

    Key words: REST style services; WCF; Android

    由于Android系統(tǒng)的開放性和免費服務,使得其成為現今手持式移動設備(如平板電腦、智能手機等)的主流操作系統(tǒng),而手持式移動設備也逐漸成為了企業(yè)信息化過程中不可或缺的一部分。但手持式移動設備由于硬件的限制難以進行大型的數據庫存儲和軟件應用,在企業(yè)信息化過程中往往處于客戶端的角色,且與服務端的平臺與技術也不盡相同,因此其與服務端之間的高效數據交互就成為急需解決的問題。

    手持式移動設備大多數基于Android系統(tǒng),因此客戶端的實現一般采用JAVA平臺;而服務端很多采用Microsoft .NET平臺。對于異構系統(tǒng)間的數據交互,制定一定的數據交換標準是真正解決異構系統(tǒng)數據不一致問題的根本途徑,雖然傳統(tǒng)的Socket、TCP通信技術實現起來簡單,但是編程復雜度高、消息解析麻煩[1]。Web Service的出現解決了異構系統(tǒng)間無縫銜接的技術,它主要有兩種風格,一種是XML,另一種是REST。由于REST最突出的特性在于回歸了Web的資源性和簡單性,棄用了基于SOAP和WSDL等復雜的接口,而采用了更易用、面向資源的模型來公開服務,因此可以開發(fā)出具有更好交互功能和可伸縮性的Web服務。

    1 WCF與RESTful Web Services

    1.1 WCF

    WCF(Windows Communication Foundation,Windows通信基礎)是微軟公司為了支持SOA(Service Oriented Architecture,面向服務的架構)而推出的基于Windows平臺開發(fā)部署軟件的SDK,它整合了.NET平臺下所有與分布式系統(tǒng)相關的技術(如XML Web Service、WSE、.NET Remoting、Enterprise Service以及MSMQ等),為分布式系統(tǒng)的開發(fā)提供一個統(tǒng)一的編程模型。

    WCF是一個基于消息的通信框架,采用基于終結點(Endpoint)的通信手段。終結點由地址(Address)、綁定(Binding)和契約(Contract)三要素組成[2]:

    地址(Address):包含兩個重要的元素,即服務位置和傳輸協(xié)議或用于服務通信的傳輸樣式,主要用于解決服務尋址的問題。地址通信常用格式為[基地址]/[可選的URL],而基地址通常采用的格式為[傳輸協(xié)議]://[機器名或域名][:可選端口]。

    綁定(Binding):綁定實現了通信的所有細節(jié),包括網絡傳輸、消息編碼,以及其他為實現某種功能(比如安全、可靠傳輸、事務等)對消息進行的相應處理。WCF中具有一系列的系統(tǒng)定義綁定,比如WebHttpBinding、BasicHttpBinding、WsHttpBinding、NetTcpBinding等。

    契約(Contract):契約與平臺無關,是對服務操作的抽象,也是對消息交換模式以及消息結構的定義。WCF定義的契約有服務契約(Service Contract)、數據契約(Data Contract)、錯誤契約(Fault Contract)和消息契約(Message Contract)四種。

    1.2 RESTful Web Services

    在.NET Framework 3.0中,WCF是不具備RESTful功能的,RESTful作為WCF的一個擴展功能是在.NET Framework 3.5以后版本中才包含進來。REST的全稱是Representation State Transfer,最早是Roy Thomas Fielding在他的博士論文中的第五章提出。REST不是一種軟件架構,而是對Web體系結構設計原則的抽象和描述[3]。它包含一組架構約束條件和原則,滿足這些約束條件和原則的應用程序或設計就是 RESTful風格的。而符合RESTful風格的Web Services,就是我們所說的RESTful Web Services。在REST中,很重要的一個概念是Resource,Resource可以是文檔、圖片、一個短暫的服務,甚至可以是真實的人等[4]。每個Resource都由一個URL來標識,目前有三種URL格式用來標識Resource,用得較多的一種是以“/”分割參數的方式[5],例如在Google中獲取某個用戶所創(chuàng)建的日歷(Calendar)的URL格式為:endprint

    http://www.google.com/calendar/feeds/userID/private-magicCookie/full,其中userID為Google賬號。

    2 客戶端與.NET服務端之間數據交互的實現

    筆者以一個經銷商平臺為例,客戶端與服務端的數據交互流程如圖1所示。

    根據數據交互流程圖,服務端必須提供四個接口,分別為驗證用戶名和密碼接口、下載服務端數據表接口、下載服務端圖片接口和訂單上傳接口。要實現數據交互,首先必須確定數據傳輸格式,然后進行服務端設計以給客戶端提供Web Services,最后實現客戶端對服務端Web Services的調用。

    2.1 數據傳輸格式的選擇

    目前數據傳輸格式大多采用XML、FSV和JSON,目前已有對這三種數據格式傳輸開銷的研究[6]。研究證明:以JSON格式傳輸數據所消耗的時間明顯短于以XML格式傳輸數據所消耗的時間,而略短于FSV傳輸數據消耗的時間; JSON反序列化時間也明顯小于XML反序列化時間;同時JSON 便于閱讀和編碼,又是JavaScript規(guī)范的子集,便于機器解析,減少了解析XML帶來的性能和兼容性問題。因此選擇JSON格式作為移動設備客戶端與服務端之間的數據傳輸格式是最適合的。

    JSON支持兩種結構[7]:

    第一種結構是“名稱/值”對集合,也稱對象結構,以“{”開始,“}”結束,每個“名稱/值”對中間用“:”分隔”,多對“名稱/值”之間使用“,”將其分隔。其結構如圖2所示。

    下面是一個簡單示例:

    var customer={" customerID":"C001","contact":"tom","phone":"13900000000"}

    這個對象包含了3個元素customerID;contact;phone,它們的值分別是C001;tom;13900000000。

    第二種結構是有序值列表,也稱數組結構,以“[”開始,“]”結束, “值”之間使用“,”將其分隔。結構如圖3所示。

    下面是一個簡單示例:

    var customerIDList={"C001","C002"," C003"}

    這個示例表明在數組customerIDList中包含3個元素' C001',' C002' ,' C003'。

    要注意的是:名稱一般為字符串形式,而值可以是雙引號括起來的字符串、數字、true、false、null,也可以是一個對象甚至是一個數組結構,并且這些值之間可以互相嵌套。

    2.2 服務端設計

    WCF的核心有兩個,一個是終結點的配置,另一個是服務接口的實現,下面分別講述其實現。

    3.2.1 WCF Endpoint配置

    在web.config文件services節(jié)中進行如下設置,具體代碼如下:

    以上代碼是以管理方式配置終結點,其中“Test_WcfService.TestService”用于指定命名空間,“http://localhost:8090/TestWcf/TestService.svc”用于指明基地址,而綁定方式“webHttpBinding”是指WCF所提供支持Web編程模型的綁定。

    2.2.2 數據接口實現

    下面以驗證用戶名和密碼接口為例,接口實現思路如圖4所示,其它接口可以參考該接口進行實現。

    數據接口實現后,接下公開URL以便客戶端調用,如:http://localhost:8090/TestWcf/TestService.svc/login

    2.3 客戶端設計

    由于Android程序對一些敏感信息的訪問權限進行了控制,而對REST風格服務的調用又需要通過網絡進行,因此在客戶端程序的全局配置文件中開放應用的網絡連接權限。

    本客戶端采用了HttpURLConnection接口來實現對服務的調用,在建立HTTP連接的基礎上對HTTP報頭屬性進行相應的設置,通過HTTP報頭傳遞相應的狀態(tài)信息。對REST風格服務進行HTTP調用時,首先要通過openConnection方法獲得一個連接對象,然后對HTTP報頭的屬性進行設置,并將請求正文輸入到輸出流中,最后將請求發(fā)送,根據服務端響應的內容進行相應的操作。

    下面以驗證客戶端用戶名及密碼的合法性為例,采用POST請求方式對REST風格服務進行調用.其它請求方式也可以此作為參照具體方法如下:

    URL url=new URL(address);//address為驗證用戶名及密碼接口URL

    HttpURLConnection connection=(HttpURLConnection)url.openConnection();

    connection.setRequestMethed("POST");//設置請求方式

    connection.setDoInput(true);//允許輸入

    connection.setDoOutput(true);//允許輸出

    connection.setRequestProperty("Accept"," application/json ");//設置接受文檔格式

    connection.setRequestProperty("Content-Type", "application/json");//設置發(fā)送文檔格式

    connection.connect();

    //POST請求

    DataOutputStream out = new DataOutputStream(connection.getOutputStream());

    JSONObject obj = new JSONObject();

    obj.element("Account ", "tom");

    obj.element("Password ", "202cb962ac59075b964b07152d234b70");//密碼用MD5加密

    out.writeBytes(obj.toString());

    out.flush();

    out.close();

    //讀取響應

    if(connection.getResponseCode()==connection.HTTP-OK){

    //請求響應成功的相應操作

    }else{//請求響應的其他相應操作

    }// 斷開連接

    connection.disconnect();

    3 結束語

    本文在研究WCF與REST風格的基礎上,并以一個經銷商平臺的實現為例分別對Android平臺客戶端與.NET服務端數據接口進行了設計與實現。實踐證明,利用REST風格服務在跨平臺數據交互不僅編程簡單、靈活性好、效率高,更重要是具有很好的安全性。

    參考文獻:

    [1] 朱夏,王茜.異構系統(tǒng)間數據交換模型的設計與實現[J].東南大學學報:自然科學版, 2006, 36(2):226-227.

    [2] Juval L?wy. WCF服務編程[M].徐雷,徐揚,譯.武漢:華中科技大學出版社.2011.

    [3] 陳亮.基于面向資源架構的REST方式Web服務的開發(fā)方法[J].信息科技,2008(22):110-111.

    [4] Roy Thomas Fielding.Architectural Styles and the Design of Network based Software Architectures[D].UNIVERSITY OF CALIFORNIA,2000:88.

    [5] 袁贊.Java與RESTful Web Services[J].電腦知識與技術:學術交流,2007(21).

    [6] 高靜,段會川.JSON數據傳輸效率研究[J].計算機工程與設計,2011, 32(7):2267-2270.

    [7] JSON[EB/OL]. http://www.json.org.endprint

    下面以驗證客戶端用戶名及密碼的合法性為例,采用POST請求方式對REST風格服務進行調用.其它請求方式也可以此作為參照具體方法如下:

    URL url=new URL(address);//address為驗證用戶名及密碼接口URL

    HttpURLConnection connection=(HttpURLConnection)url.openConnection();

    connection.setRequestMethed("POST");//設置請求方式

    connection.setDoInput(true);//允許輸入

    connection.setDoOutput(true);//允許輸出

    connection.setRequestProperty("Accept"," application/json ");//設置接受文檔格式

    connection.setRequestProperty("Content-Type", "application/json");//設置發(fā)送文檔格式

    connection.connect();

    //POST請求

    DataOutputStream out = new DataOutputStream(connection.getOutputStream());

    JSONObject obj = new JSONObject();

    obj.element("Account ", "tom");

    obj.element("Password ", "202cb962ac59075b964b07152d234b70");//密碼用MD5加密

    out.writeBytes(obj.toString());

    out.flush();

    out.close();

    //讀取響應

    if(connection.getResponseCode()==connection.HTTP-OK){

    //請求響應成功的相應操作

    }else{//請求響應的其他相應操作

    }// 斷開連接

    connection.disconnect();

    3 結束語

    本文在研究WCF與REST風格的基礎上,并以一個經銷商平臺的實現為例分別對Android平臺客戶端與.NET服務端數據接口進行了設計與實現。實踐證明,利用REST風格服務在跨平臺數據交互不僅編程簡單、靈活性好、效率高,更重要是具有很好的安全性。

    參考文獻:

    [1] 朱夏,王茜.異構系統(tǒng)間數據交換模型的設計與實現[J].東南大學學報:自然科學版, 2006, 36(2):226-227.

    [2] Juval L?wy. WCF服務編程[M].徐雷,徐揚,譯.武漢:華中科技大學出版社.2011.

    [3] 陳亮.基于面向資源架構的REST方式Web服務的開發(fā)方法[J].信息科技,2008(22):110-111.

    [4] Roy Thomas Fielding.Architectural Styles and the Design of Network based Software Architectures[D].UNIVERSITY OF CALIFORNIA,2000:88.

    [5] 袁贊.Java與RESTful Web Services[J].電腦知識與技術:學術交流,2007(21).

    [6] 高靜,段會川.JSON數據傳輸效率研究[J].計算機工程與設計,2011, 32(7):2267-2270.

    [7] JSON[EB/OL]. http://www.json.org.endprint

    下面以驗證客戶端用戶名及密碼的合法性為例,采用POST請求方式對REST風格服務進行調用.其它請求方式也可以此作為參照具體方法如下:

    URL url=new URL(address);//address為驗證用戶名及密碼接口URL

    HttpURLConnection connection=(HttpURLConnection)url.openConnection();

    connection.setRequestMethed("POST");//設置請求方式

    connection.setDoInput(true);//允許輸入

    connection.setDoOutput(true);//允許輸出

    connection.setRequestProperty("Accept"," application/json ");//設置接受文檔格式

    connection.setRequestProperty("Content-Type", "application/json");//設置發(fā)送文檔格式

    connection.connect();

    //POST請求

    DataOutputStream out = new DataOutputStream(connection.getOutputStream());

    JSONObject obj = new JSONObject();

    obj.element("Account ", "tom");

    obj.element("Password ", "202cb962ac59075b964b07152d234b70");//密碼用MD5加密

    out.writeBytes(obj.toString());

    out.flush();

    out.close();

    //讀取響應

    if(connection.getResponseCode()==connection.HTTP-OK){

    //請求響應成功的相應操作

    }else{//請求響應的其他相應操作

    }// 斷開連接

    connection.disconnect();

    3 結束語

    本文在研究WCF與REST風格的基礎上,并以一個經銷商平臺的實現為例分別對Android平臺客戶端與.NET服務端數據接口進行了設計與實現。實踐證明,利用REST風格服務在跨平臺數據交互不僅編程簡單、靈活性好、效率高,更重要是具有很好的安全性。

    參考文獻:

    [1] 朱夏,王茜.異構系統(tǒng)間數據交換模型的設計與實現[J].東南大學學報:自然科學版, 2006, 36(2):226-227.

    [2] Juval L?wy. WCF服務編程[M].徐雷,徐揚,譯.武漢:華中科技大學出版社.2011.

    [3] 陳亮.基于面向資源架構的REST方式Web服務的開發(fā)方法[J].信息科技,2008(22):110-111.

    [4] Roy Thomas Fielding.Architectural Styles and the Design of Network based Software Architectures[D].UNIVERSITY OF CALIFORNIA,2000:88.

    [5] 袁贊.Java與RESTful Web Services[J].電腦知識與技術:學術交流,2007(21).

    [6] 高靜,段會川.JSON數據傳輸效率研究[J].計算機工程與設計,2011, 32(7):2267-2270.

    [7] JSON[EB/OL]. http://www.json.org.endprint

    广东省| 濮阳县| 屏南县| 东光县| 玉树县| 静安区| 玉环县| 庐江县| 东阳市| 高平市| 高阳县| 湾仔区| 额济纳旗| 北京市| 富民县| 沐川县| 郑州市| 江阴市| 广灵县| 陆河县| 勃利县| 平和县| 丽江市| 河西区| 周至县| 桐庐县| 额尔古纳市| 永州市| 邯郸市| 龙门县| 亳州市| 临清市| 灌南县| 九龙城区| 浦江县| 自贡市| 滨州市| 保亭| 三都| 都匀市| 辽中县|