天天看點

json json-rpc 如何在項目中便宜引入Ajax架構 (Joyrock開源項目)

 joyrock簡介: 

    joyrock是一個基于lgpl協定的開源項目,實作了json和json-rpc,支援微軟asp.net架構。它友善我們讀取從浏覽器流向伺服器的json對象,也友善在響應流中寫入json對象。

    jayrock 遠端方法要求寫在一個ashx中,頁面請求這個ashx的時候,在processrequest 中根據request對象中的參數資訊,确定請求的伺服器端方法名稱和參數,然後進行調用,并傳回結果。

    部落格url:http://www.cnblogs.com/shanyou/archive/2007/07/01/802213.html

    官方簡介url:http://jayrock.berlios.de/

    前面幾篇部落格中有幾篇關于ext的例子,其中有提到過,關于json對象在前背景的傳遞,以及項目業務邏輯類在js中注冊的方式。這些将以這篇文章作為契子,引出一系列相關的部落格,它們是我最近學習的東西。

    當我有将産品的前台全部使用ext的想法時,如何最大程度地利用到現有架構,便成了最迫切需要解決的問題:

    1. 現在架構內建了異常處理、日志、事務、工具類等子產品,相對穩定。

    2. 如果使用ajax,還需要重新寫一套資料通路層,那是沒人願意做的事情。

    3. 用戶端與服務端之間對象序列化與傳遞是個問題。

    第1、2個問題,就涉及到服務端業務邏輯類的遠端調用,如json-rpc;而第3個問題,使用json封裝吧。關于xml格式與json的比較,網上有很多文章,在此不獒叙。

    joyrock示例:配置一個的例子非常簡單,首先你需要下載下傳到它的包,官方網站:http://developer.berlios.de/project/showfiles.php?group_id=4638,這是一個台灣的站點,速度可能有點慢。我把其中必須的jayrock.dll、jayrock.json.dll與json.js放到csdn資源站點上,url為http://download.csdn.net/source/405504。

    在項目中,将jayrock.dll與jayrock.json.dll引用進來,在頁面中,将json.js檔案包含進來(<script type="text/javascript" src="filepath/json.js"></script>)。

    jayrock的遠端方法,需要寫在一個“一般資源檔案”(.ashx)内:

<%@ webhandler language="c#" class="handler" %>

using system;

using system.web;

using jayrock.json;

using jayrock.jsonrpc;

using jayrock.jsonrpc.web;

public class handler : jsonrpchandler

{

    [jsonrpcmethod("greetings")]

    public string greetings()

    {

        return "welcome to jayrock!";

    }

}

    你可以在這層通路你的業務邏輯。如此,頁面上引入json.js與.ashx檔案:

json json-rpc 如何在項目中便宜引入Ajax架構 (Joyrock開源項目)

<script type="text/javascript" src="../common/js/json.js"></script>

json json-rpc 如何在項目中便宜引入Ajax架構 (Joyrock開源項目)

<script type="text/javascript" src="handler.ashx?proxy"></script>

    便可以在js中直接new handler對象,并通路greetings方法了。

var s = new handler(); 

        alert("sync:" + s.greetings()); 

        s.greetings(function(response) { 

               alert("async:" + response.result) 

        }

);

    補充一:我朋友的公司開發一個開源産品,關鍵技術基于一個開源項目,在産品釋出前才了解到,這個開源項目基于gpl協定,那麼他們的産品也必須開源,必須繼承gpl協定,如此,沒有任何商機可言。

    如果你在開發項目或者産品時,對開源協定需要一定的了解。

    lgpl開源協定——lgpl 是gpl的一個為主要為類庫使用設計的開源協定。和gpl要求任何使用/修改/衍生之gpl類庫的的軟體必須采用gpl協定不同。lgpl允許商業軟體通過類庫引用(link)方式使用lgpl類庫而不需要開源商業軟體的代碼。這使得采用lgpl協定的開源代碼可以被商業軟體作為類庫引用并釋出和銷售。

    gpl/lgpl都保障原作者的知識産權,避免有人利用開源代碼複制并開發類似的産品。 

    常見的開源協定:bsd、gpl、lgpl、mit(前面4種通過iso準許)、apach licene 2.0

    來源:javaeye上一篇關于開源協定的文章《開源協定詳解》,位址沒有了,去javaeye搜尋吧。

    補充二:常用的.net下ajax架構(動态連接配接庫ajax.dll),同樣實作了遠端調用,但b、s端之間的資料傳遞沒有使用json格式,而傳遞datatable(在js端序列化成為了數組對象)。關于它的配置,将在後續部落格中,放出來。

    與jayrock的比較:個人覺得jayrock需要一段時間熟悉它的api,而且相對來說網上的資料較少。ajax.dll在序列化list(包含資料模型model)時,處理比較麻煩,至少我現在還沒能實作。

繼續閱讀