json json-rpc 如何在項目中便宜引入Ajax框架 (Joyrock開源項目)
Joyrock簡介:
Joyrock是一個基於LGPL協議的開源項目,實現了JSON和JSON-RPC,支持微軟ASP.NET框架。它方便我們讀取從瀏覽器流向服務器的JSON對象,也方便在響應流中寫入JSON對象。
Jayrock 遠程方法要求寫在一個ashx中,頁麵請求這個ashx的時候,在ProcessRequest 中根據Request對象中的參數信息,確定請求的服務器端方法名稱和參數,然後進行調用,並返回結果。
博客url:https://www.cnblogs.com/shanyou/archive/2007/07/01/802213.html
官方簡介url:https://jayrock.berlios.de/
前麵幾篇博客中有幾篇關於EXT的例子,其中有提到過,關於JSON對象在前後台的傳遞,以及項目業務邏輯類在JS中注冊的方式。這些將以這篇文章作為契子,引出一係列相關的博客,它們是我最近學習的東西。
當我有將產品的前台全部使用EXT的想法時,如何最大程度地利用到現有框架,便成了最迫切需要解決的問題:
1. 現在框架集成了異常處理、日誌、事務、工具類等模塊,相對穩定。
2. 如果使用AJAX,還需要重新寫一套數據訪問層,那是沒人願意做的事情。
3. 客戶端與服務端之間對象序列化與傳遞是個問題。
第1、2個問題,就涉及到服務端業務邏輯類的遠程調用,如JSON-RPC;而第3個問題,使用JSON封裝吧。關於XML格式與JSON的比較,網上有很多文章,在此不獒敘。
Joyrock示例:配置一個的例子非常簡單,首先你需要下載到它的包,官方網站:https://developer.berlios.de/project/showfiles.php?group_id=4638,這是一個台灣的站點,速度可能有點慢。我把其中必須的Jayrock.dll、Jayrock.Json.dll與json.js放到csdn資源站點上,url為https://download.csdn.net/source/405504。
在項目中,將Jayrock.dll與Jayrock.Json.dll引用進來,在頁麵中,將json.js文件包含進來(<script type="text/javascript" src="filepath/json.js"></script>)。
Jayrock的遠程方法,需要寫在一個“一般資源文件”(.ashx)內:
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文件:


便可以在js中直接new Handler對象,並訪問greetings方法了。
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)時,處理比較麻煩,至少我現在還沒能實現。
最後更新:2017-04-02 00:06:46