精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
WCF與AJAX編程開發實踐(4):支持JSON的AJAX WCF服務
userphoto

2013.08.29

關注

    上一節學習了WCF與AJAX編程開發實踐(3):支持ASP.NET AJAX的WCF服務。今天繼續學習WCF與AJAX編程開發實踐(4):支持JSON的AJAX WCF服務。 本文重點介紹的是如何在支持AJAX的WCF服務里使用JSON進行數據交換。這里會首先介紹JSON的基本概念,為了說明問題。我們會給出一個JSON的例子。中間介紹WCF的JSON編程模型,最后給出的是示例代碼。

    首先我們來看一下JSON的定義。

【1】JSON:

    JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,易于閱讀和編寫,同時也易于機器解析和生成。它基于ECMA262語言規范(1999-12第三版)中JavaScript 編程語言的一個子集。 JSON采用與編程語言無關的文本格式,但是也使用了類C語言(包括C, C++, C#, Java, JavaScript, Perl, Python等)的習慣,這些特性使JSON成為理想的數據交換格式。

【2】JSON例子:

    【2.1】現在我們看一下JSONd數據結構。JSON的結構基于下面兩點:

  • “名稱/值”對的集合 不同語言中,它被理解為對象(object),記錄(record),結構(struct),字典(dictionary),哈希表(hash table),鍵列表(keyed list)。
  • 值的有序列表 多數語言中被理解為數組(array)。
  • JSON必須(MUST)是一個對象、數組、數字或字符串,或者是下面三個實字名之一:
    • false null true

    實字名必須(MUST)是小寫的,且不允許有其它的實字名。

    • value = false / null / true / object / array / number / string

      【2.2】我們可以定義一個User的代碼,JSON表示如下:

                var user1= { “Name”:”Frank”, “Address”:”ShangHai”};

                也可以定義一個對象的集合,JSON示例如下:

       下面代碼演示了使用JSON形式定義這個用戶列表:

var userList = [
{ “Name”:”Frank”, “Address”:”ShangHai”},
{ “Name”:”Xu Lei”, “Address”:”BeiJing”},
]

    【2.3】與XML比較:

       我們知道。XML是可擴展置標語言(eXtensible Markup Language,簡稱XML),又稱可擴展標記語言。這與JSON有很大不同。雖然都是表示數據。JSON與XML最大的不同在于XML是一個完整的標記語言,而JSON不是。這使的XML在程序判讀上需要比較多的功夫。主要的原因在于XML的設計理念與JSON不同。XML利用標記語言的特性提供了絕佳的延展性(如XPath),而JSON的重點在于數據的交換。

【3】WCF 的JSON編程模型:

       既然JSON與XML成為又一個標準的數據交換格式。那么WCF也對其進行了很好的支持。現在我們來看看WCF的JSON編程模型。

      我們知道WCF的Web編程模型已經非常的完善,并且很好地支持了XML格式的數據交換。這里如果要對JSON支持,首先要做的就是對于數據對象的JSON序列化和反序列化。也就是Data Object—>JSON—>Data Object這樣的過程。

      那么為了做好這一點,WCF提供了一個專門的序列化器,DataContractJsonSerializer 。來提供對于JSON數據的支持工作。

此序列化器的MSDN介紹如下:

可以使用 DataContractJsonSerializer 類將類型實例序列化為 JSON 文檔,并將 JSON 文檔反序列化為類型實例。例如,可以使用包含重要數據(如名稱和地址)的屬性創建一個名為 Person 的類型。然后,可以創建和操作一個 Person 類實例,并在 JSON 文檔中寫入所有其屬性值以便于以后檢索。可隨后將該 JSON 文檔反序列化為 Person 類,或者反序列化為另一個具有等效數據協定的類。如果在服務器上的傳出答復的序列化期間發生錯誤或答復操作由于某種其他原因引發異常,則可能不會將其作為錯誤返回到客戶端。

    當然和DataContractSerializer一樣,DataContractJsonSerializer的工作也是出于WCF的背后。除非我們自己要控制序列化和反序列化過程。WCF里我們可以方便地定義數據類型,然后框架會根據我們設置的數據格式來確定使用那個序列化器。比如:RequestFormat=WebMessageFormat.Xml,ResponseFormat=WebMessageFormat.Json)

請求使用的是DataContractSerializer,而返回數據使用的是DataContractJsonSerializer。

 

【4】創建ASP.NET 網站:

     下面的過程和上一節里的過程類似,也是主要包含,開發和測試WCF服務的過程。但是為了演示對于JSON的支持,我們這里部分服務方法和JS代碼做了修改。具體如下:

       首先這里要求你安裝了Visual Studio2008 開發環境。

創建一個普通的ASP.NET 網站,步驟很簡單,也就是在New ->Web Site 選擇網站即可,如下圖所示:

【5】創建WCF Service:

       【5.1】其次創建一個支持AJAX的WCF服務。

這里與之前的ASP.NET Web Service不同,我們需要自己創建一個支持AJAX的WCF Service即可,如圖所示:

【5.2】服務類定義:

AjaxWCFService服務類型定義了一個操作,和普通的WCF服務操作沒有區別,需要標注[OperationContract]。這個操作的代碼很簡單,就是接受一個name參數,然后返回一個User。具體實現如下:

[ServiceContract(Namespace="AjaxFrankXuLei")]
[AspNetCompatibilityRequirements(RequirementsMode 
= AspNetCompatibilityRequirementsMode.Allowed)]
public class AjaxWCFService
{
    
// Add [WebGet] attribute to use HTTP GET
    [WebGet(RequestFormat=WebMessageFormat.Xml,ResponseFormat=WebMessageFormat.Json)]
    [OperationContract]
    
public User SayHello(String name)
    { 

        
return new User() { Name = string.Format("Hello JSON {0}",name), Address = "China" }; 

    } 

    
// Add more operations here and mark them with [OperationContract]
}
[DataContract()]
public class User
{
    
public User() { } 

    [DataMember]
    
public string Name; 

    [DataMember]
    
public string Address;
}

 

    這里比較關鍵的一個服務屬性標注就是:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]應它的作用就是表示WCF服務能否在 ASP.NET 兼容模式下運行。我們這里設置為允許。

     添加AjaxEnabledWCFService,Visual Studio會自動為我們加上這些標注。

       【5.3】配置文件Web.Config:

    Visual Studio會幫助我們添加一些重要的代碼和配置信息

【6】創建ASP.NET AJAX客戶端:

       選擇我們需要一個客戶端,來調用WCF服務。

【6.1】這里創建ASP.NET AJAX客戶端,最重要的是要使用一個服務端控件ScriptManager。這個可以在ToolBox里找到。

它的作用很關鍵,上一節我們討論過。 ScriptManager 控件是 ASP.NET 中 AJAX 功能的中心。該控件可管理一個頁面上的所有 ASP.NET AJAX 資源。其中包括將 Microsoft AJAX Library 腳本下載到瀏覽器和協調通過使用 UpdatePanel 控件啟用的部分頁面更新。(更多內容大家可以自己閱讀http://msdn.microsoft.com/zh-cn/library/system.web.ui.scriptmanager.aspx頁面的介紹)。

  【6.2】HTML頁面設計,我們就沿用第二節里的頁面控件。基本不做修改。功能很簡單,和第二節一樣,我們輸入用戶名UserName,然后調用WCF服務,返回數據。

  【6.3】 剩下的就是Javascript函數,這個過程也非常的簡單,因為Visual Studio2008的腳本代碼編寫的提示也非常的方便,你可以方便地寫出一個完成的Javascript函數,這里也可以使用Jquery。 代碼如下:

 function AjaxSearch() 
        {
            
//獲取輸入name
            var name = $get("UserName").value;
            
//創建 ajaxClient
            var ajaxClient = new AjaxFrankXuLei.AjaxWCFService();
            
//調用SayHello方法
            ajaxClient.SayHello(name, OnComplete, OnError);          
        } 

        
//CallBack Sucessful
        function OnComplete(result) 
        {
            
// Assign the result
            alert(result.Name);
            document.getElementById(
"AjaxResult").value = result.Name;
            document.getElementById(
"Address").value = result.Address;
        }
        
//CallBack Error
        function OnError(result) 
        {
            alert(result.get_message());
        } 

 

   【7】運行結果:

       這里我們可以直接在IE里測試一下效果,打開瀏覽器,瀏覽Default.aspx網頁,這個網頁里包含了我們調用WCF服務的客戶端Javascript腳本。

      我們在控件里輸入姓名以后,點擊Search按鈕,就會看到調用WCF服務操作SayHello返回的結果。如圖所示:

【8】總結:

          JSON現在也成為大多數平臺支持的數據交換格式。變得日益重要。

          Justin在《WCF技術內幕》也提到過,雖然早期WCF開發團隊不是很確定JSON日后的地位,但是為其預留了很好的擴展空間。

          現在任何跨平臺的數據交換,主要還是采用XML,而JSON作為輕量級數據交換格式,也越來越被其他平臺接受。很多公司的Developer職位要求熟悉XML的同時,對于JSON做出了要求。作為開發者簡單了解一下,也是必要的。

          最后,我也給出本文的例子代碼,供各位參考:/Files/frank_xl/4.AjaxJSONWCFWebSite.zip

參考資料:

1.http://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.json.datacontractjsonserializer(VS.90).aspx

2.WCF與AJAX編程開發實踐(1):AJAX基礎概念和純AJAX示例

3.WCF與AJAX編程開發實踐(2):支持ASP.NET AJAX的Web Service

4.WCF與AJAX編程開發實踐(3):支持ASP.NET AJAX的WCF服務

5.http://wowo.hztalk.com/?p=98

6.http://ssgemail.javaeye.com/blog/36776

7.http://www.div-css.com/html/x1/json/038125.html

8.http://zh.wikipedia.org/zh-cn/JSON

本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
WCF與AJAX編程開發實踐(1):AJAX基礎概念和純AJAX示例
asp.net中使用jquery的ajax來post數據的樹控件
.net技術整理
struts2與json的整合
面向.NET開發人員的Ajax 技術平臺策略
面向 Java 開發人員的 Ajax(二): Ajax 的 Java 對象序列化
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 二连浩特市| 清新县| 建昌县| 准格尔旗| 青铜峡市| 石屏县| 孟津县| 乾安县| 富源县| 五常市| 绥江县| 盐池县| 高尔夫| 娄底市| 洛川县| 宁蒗| 武平县| 甘洛县| 海兴县| 绥芬河市| 平远县| 班玛县| 东乌| 晋城| 图们市| 景德镇市| 三亚市| 邻水| 红河县| 扎囊县| 张掖市| 晋中市| 灵台县| 平远县| 射阳县| 瑞安市| 德清县| 陇南市| 武汉市| 神农架林区| 邛崃市|