舍WebService 用.NET4中jQuery調用WCF

來源: 博客園  發布時間: 2011-01-24 11:40  閱讀: 2127 次  推薦: 0   原文鏈接   [收藏]  
摘要:走進.NET 4的新時代,WCF的配置的確簡化了不少(比如:在.NET 4中用IIS部署WCF就這么簡單),WCF的ajax調用同樣也簡化了。所以我們決定拋棄WebService,全面進軍WCF。

  在我們之前的開發中,對于ajax程序,都是通過jQuery調用標記為[System.Web.Script.Services.ScriptService]的WebService,然后在WebService中調用后臺的WCF。這成為WebService存在的唯一理由:作為ajax調用的中轉站。如果要拋棄WebService,只需用WCF來作為中轉站。

  在.NET 3.5時代,jQuery就可以調用WCF,之前我也寫過博客(比如:jQuery調用WCF需要注意的一些問題),但配置比較麻煩。

  走進.NET 4的新時代,WCF的配置的確簡化了不少(比如:在.NET 4中用IIS部署WCF就這么簡單),WCF的ajax調用同樣也簡化了。所以我們決定拋棄WebService,全面進軍WCF。

  舍WebService 用.NET4中jQuery調用WCF

  現在博客園的程序架構已經基于WCF,所以我們對WCF格外關注,分享的文章有些可能比較簡單,但都是源自我們實際開發中遇到并解決的問題。

  下面分享一下在.NET4中如何通過jQuery調用WCF:

  說明:這里的WCF僅僅是給ajax調用的中轉站,通過它再去調用本地服務層接口或者后臺的其他WCF服務。

  1. 在App_Code中添加一個類文件(就是普通的class),比如叫HelloService.cs。

  2. 在HelloService.cs中添加一個方法,再加上一些WCF的設置,如下圖:

  舍WebService 用.NET4中jQuery調用WCF

  [ServcieContract]與[OperationContract]是標準設置,這里將‘服務接口”與"服務實現"寫在了一個類中,不是推薦做法。我們這里這樣做,是因為需要的是一個ajax調用中轉站,越簡單越好。

  這里需要注意的是AspNetCompatibilityRequirements,如果不進行這個設置,WCF就不走ASP.NET管線,ASP.NET的上下文信息就拿不到,比如:不加這個設置,HttpContext.Current就為null,最常用的場景就是根據HttpContext獲取用戶登錄信息,對用戶權限進行驗證。對應于這個設置,在web.config的中需要加上,如下圖:

  舍WebService 用.NET4中jQuery調用WCF

  *注意的地方:web.config中加了上面的設置后,所有的WCF服務實現都要設置AspNetCompatibilityRequirements屬性。

  3. 繼續在web.config增加設置,在system.serviceModel/serviceHostingEnvironment中增加serviceActivations,如下圖:

  舍WebService 用.NET4中jQuery調用WCF

  relativeAddress就是WCF服務的地址名,service就是之前創建的HelloService類名,factory是關鍵,支持ajax調用,靠的就是System.ServiceModel.Activation.WebScriptServiceHostFactory。

  好了,三步搞定WCF端的配置。這時在VS2010啟動項目,就可以在瀏覽器中訪問這個WCF了,比如:http://localhost:3960/jQueryWcfDemo/HelloService.svc。如果出現下面的畫面,就表示WCF端工作正常。

  舍WebService 用.NET4中jQuery調用WCF

  4. jQuery調用WCF開始了...代碼如下:

  舍WebService 用.NET4中jQuery調用WCF

  需要注意的地方是上圖中加背景的地方,contentType與data,與WebService的不同之處已在注釋中說明。

  點擊提交按鈕,"Hello, World"...全面進入WCF時代,見下圖:

  舍WebService 用.NET4中jQuery調用WCF

0
0
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()