在Asp.Net中實現類似DWR的功能

iDotNetSpace發表於2009-10-23

熟悉Ajax的人應該都知道DWR這個開源框架,它讓Ajax程式開發變得簡單,但是目前好像只能支援Java,今天就來說一下我在Asp.Net專案中怎樣模擬實現DWR的功能:

    建立一個介面(姑且叫做IWAjaxEngine),其作用定義對Ajax暴露的方法,我設計的是一個返回string型別的方法,還有一個是沒有返回值的方法,兩個方法的引數都是Dictionary型別。這樣,Ajax在呼叫後臺業務邏輯類時,都可以通過這個介面型別進行呼叫,而那些業務邏輯類只要是實現了這個介面,就可以通過類名反射進行初始化,反射部分下面詳細再說。

    在App_Data目錄下新建一個XML文件作為配置檔案,放在這個目錄下的原因,大家應該都知道吧,是可以起到保護作用。這個配置檔案中就是專門配置實現IWAjaxEngine介面的業務邏輯類的資訊(類名、引數列表、引數型別等等),然後建立一個封裝這個配置檔案的類(WAjaxConfig),可以把這個類的例項設為static,這樣就不用每次都讀配置檔案了。

    接下來就說到重點部分了,也就是Ajax怎麼直接呼叫後臺業務邏輯類。我的想法是建立一個Web窗體,也就是.aspx和.aspx.cs檔案,在page_load事件中根據Ajax傳遞過來的引數(包含能夠找到配置檔案中類資訊的ID標識)在WAjaxConfig中找到要呼叫的類名(找不到的話就丟擲異常),然後通過類名反射建立一個該類的例項(當然是以IWAjaxEngine介面作為該例項的型別),有了例項,我們就可以呼叫介面定義的兩個方法,要麼返回字串要麼什麼都不返回。

    整個實現的思路就是這樣,說起來與DWR還是有所不同的,不過已經滿足了我的需求。當然這裡說的有些簡單,真正做起來並不是很容易,有很多需要細化的地方。另外,我還做了一些輔助的工具類,可以生成XML或JSON字串;前臺也實現了類似於DWR引擎指令碼的engine.js和工具集指令碼util.js(其實是把DWR的util.js搬過來了,誰讓人家做的功能強大呢,不過也添改了一些程式碼,因為發現有些js程式碼不符合標準DOM操作,FireFox就不支援了,還有些方法不支援XML DOM 的NodeList。在此謝謝那位DWR的作者-_-),這樣,我們就可以在前臺像使用DWR一樣進行程式設計了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-617320/,如需轉載,請註明出處,否則將追究法律責任。

相關文章