不少應用程序的作者為編程人員提供了可以在其它程序中復用的組件。我們通常會在自己的程序中引入這些第三方組件,調用其中現成的函數來實現相對復雜的功能。事實上,我們也可以通過網絡發布第三方組件中的函數,以便為更多用戶更為方便地提供服務。
對於.NET開發,可以通過ASP.NET(對人)或Web Service(對機器)技術包裝第三方組件。下面以用ASP.NET發布Matlab組件中的Execute函數為例說明。前提是服務器上已安裝Matlab。
在VS2005中新建一個ASP.NET站點,在Solution Explorer窗格的站點目錄上點擊右鍵選擇Add Reference,加入Matlab的COM組件:Matlab Application(version X.X) 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 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中運行這個站點,在出現的網頁中輸入一個表達式,如“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協議的性質以及服務器端執行的特性,這種對第三方組件的包裝一般適於發布數據處理函數,而不適於發布控制函數。同時這一方法對實時性強或需要保存狀態的服務也不很適宜。安全起見,我們也可以對第三方組件進行二次封裝,加入數據過濾與異常處理。
原理非常簡單。希望大家能與我討論這一方案在實際應用中的價值。