對于.net開發(fā),可以通過asp.net(對人)或web service(對機器)技術包裝第三方組件。下面以用asp.net發(fā)布matlab組件中的execute函數(shù)為例說明。前提是服務器上已安裝matlab。
在vs2005中新建一個asp.net站點,在solution explorer窗格的站點目錄上點擊右鍵選擇add reference,加入matlab的com組件:matlab application(version x.x) type library。
在網(wǎng)頁上分別添加一個textbox、一個button和一個literal控件。textbox用以輸入表達式,button確定執(zhí)行,literal輸出結果。添加以下事件代碼,以便調用matlab組件中的execute函數(shù)執(zhí)行matlab語句:
protected sub button1_click(byval sender as object, _
byval e as system.eventargs) handles button1.click
dim matlab as new mlapp.mlapp
dim strmatlab as string
strmatlab = textbox1.text
dim strresult as string = matlab.execute(strmatlab)
strresult = strresult.replace(chr(10), "<br>")
strresult = strresult.replace(" ", " ")
me.literal1.text = strresult
matlab.quit()
end sub
在vs2005中運行這個站點,在出現(xiàn)的網(wǎng)頁中輸入一個表達式,如“dsolve('dx=x^2+5')”,點擊按鈕后隨即會顯示結果:“ans = 5^(1/2)*tan(5^(1/2)*t+5^(1/2)*c1)”。但如果用iis發(fā)布這個站點,運行時則會出錯,提示的原因是asp.net沒有創(chuàng)建組件的權限。根據(jù)出錯提示,我們需要在網(wǎng)站的web.config文件中加入一句:
<identity impersonate="true" username="xx" password="xx"/>
這里指明的用戶應當是服務器端有相關權限的用戶。如果不指定則在客戶端頁面進行身份驗證。當然,在web.config中明文保存用戶名和密碼是不安全的,在真正的應用中要加密。
就此,我們完成了matlab表達式求值函數(shù)的網(wǎng)絡發(fā)布。可以通知沒有安裝matlab的朋友登錄你的網(wǎng)站使用的matlab強大的計算功能了。(注意:此例僅供演示,matlab強大的語句和工具箱足以讓遠程用戶通過這個網(wǎng)頁訪問你的文件系統(tǒng)。)
由于http協(xié)議的性質以及服務器端執(zhí)行的特性,這種對第三方組件的包裝一般適于發(fā)布數(shù)據(jù)處理函數(shù),而不適于發(fā)布控制函數(shù)。同時這一方法對實時性強或需要保存狀態(tài)的服務也不很適宜。安全起見,我們也可以對第三方組件進行二次封裝,加入數(shù)據(jù)過濾與異常處理。
原理非常簡單。希望大家能與我討論這一方案在實際應用中的價值。
參考:
1、李洪根,在.net中應用matlab算法
(http://www.microsoft.com/china/community/column/25.mspx)
2、matlab 7.1,matlab web server 相關幫助文檔
新聞熱點
疑難解答
圖片精選