asp.net 不少應用程式的作者為編程人員提供了可以在其它程式中複用的組件。我們通常會在自己的程式中引入這些第三方組件,調用其中現成的函數來實現相對複雜的功能。事實上,我們也可以通過網路發布第三方組件中的函數,以便為更多使用者更為方便地提供服務。
對於.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協議的性質以及伺服器端執行的特性,這種對第三方組件的封裝一般適於發布資料處理函數,而不適於發布控制函數。同時這一方法對即時性強或需要儲存狀態的服務也不很適宜。安全起見,我們也可以對第三方組件進行二次封裝,加入資料過濾與異常處理。
原理非常簡單。希望大家能與我討論這一方案在實際應用中的價值。
參考:
1、李洪根,在.NET中應用MATLAB演算法
(http://www.microsoft.com/china/community/Column/25.mspx)
2、Matlab 7.1,Matlab Web Server 相關協助文檔