不少應用程式的作者為程式設計人員提供了可以在其它程式中復用的元件。我們通常會在自己的程式中引入這些第三方元件,呼叫其中現成的函數來實現相對複雜的功能。事實上,我們也可以透過網路發佈第三方元件中的函數,以便為更多用戶更為方便地提供服務。
對於.NET開發,可以透過ASP.NET(對人)或Web Service(對機器)技術包裝第三方元件。以下以ASP.NET發佈Matlab元件中的Execute函數為例說明。前提是伺服器上已安裝Matlab。
在VS2005中新建一個ASP.NET站點,在Solution Explorer窗格的站點目錄上點選右鍵選擇Add Reference,加入Matlab的COM元件:Matlab Application(version XX) Type Library。
在網頁上分別加入一個TextBox、一個Button和一個Literal控制項。 TextBox用以輸入表達式,Button確定執行,Literal輸出結果。新增以下事件程式碼,以便呼叫Matlab元件中的Execute函數執行Matlab語句:
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim matlab As New MLApp.MLApp
Dim
strMatLabat = 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中運行這個站點,在出現的網頁中輸入一個表達式,如“dsolve('Dx=x^2+5')”,點擊按鈕後隨即會顯示結果:「ans = 5^(1/2)*tan(5^(1/2)*t+5^(1/2)*C1)」。但如果用IIS發布這個站點,運行時會出錯,提示的原因是ASP.NET沒有建立元件的權限。根據出錯提示,我們需要在網站的web.config檔中加入一句:
<identity impersonate="true" userName="xx" password="xx"/>
這裡指明的使用者應當伺服器端有相關權限的使用者。如果不指定則在用戶端頁面進行身份驗證。當然,在web.config中明文保存使用者名稱和密碼是不安全的,在真正的應用程式中要加密。
就此,我們完成了Matlab表達式求值函數的網路發佈。可以通知沒有安裝Matlab的朋友登入你的網站使用的Matlab強大的運算功能了。 (注意:此範例僅供演示,Matlab強大的語句和工具箱足以讓遠端使用者透過這個網頁存取你的檔案系統。)
由於HTTP協定的性質以及伺服器端執行的特性,這種對第三方元件的包裝一般適於發布資料處理函數,而不適於發布控制函數。同時這方法對即時性強或需要保存狀態的服務也不很適宜。安全起見,我們也可以對第三方元件進行二次封裝,加入資料過濾與異常處理。
原理非常簡單。希望大家能與我討論這方案在實際應用上的價值。
參考:
1、李洪根,在.NET中應用MATLAB演算法
( http://www.microsoft.com/china/community/Column/25.mspx )
2、Matlab 7.1,Matlab Web Server 相關幫助文檔