LAME報告和驗證控件
在移植過程中,開發組決定修改數據輸入頁以充分發揮ASP .NET檢驗控件的優勢,並降低現存代碼的復雜度。當用戶想提交一個LAME報告時,他們在點擊錯誤對話框(幫助文檔的反饋鏈接)上的LAME按鈕,或者是工具欄上的Feedback按鈕之後,在Visual Studio .NET IDE中會見到一個頁面。為了將檢驗控件整合到LAME輸入頁,有必要重寫這些頁,並充分利用ASP .Net Web Form技術。
Web Form檢驗控件提供了一套獨立於浏覽器的校驗函數,而不需要你在客戶應用程序中用腳本語言寫代碼。這個控件可以在低版本的浏覽器中使用(包括Microsoft Internet Explorer 4.0以前的版本和Netscape 5.0以前的版本),但需要利用服務器來檢查控件的值並返回結果。當發現高版本的浏覽器(Interne Explorer 4.0及其以後的版本和Netscape 5.0及其以後的版本)時,驗證的主要步驟是在向服務器發送數據之前,在客戶端完成的。在使用該版本浏覽器時,如果被提交到服務器頁面企圖欺騙或繞過驗證規則,服務器端的驗證仍將進行。
Figure 5.
原來的LAME入口頁中的驗證邏輯的目標很簡單:要求用戶在提交表單之前已經在某些字段上填了值。盡管目標很簡單,但它需要類似於圖5中的JScript代碼的客戶端腳本代碼。
除了需要在客戶端用腳本語言進行驗證,還要在服務器上增加驗證邏輯,以防止用戶繞過客戶端的驗證並提交無效數據。使用了ASP .Net驗證控件後,可以用Required,Compare和 RegularExpressionValidator等控件替換這些驗證邏輯。這樣不僅可以從頁面中刪掉很多Jscript代碼,而且可以利用RegularExpressionValidator控件來加強驗證。但當發現了高版本的浏覽器時,仍將向客戶端發送Jscript代碼,這樣就可以在提交到服務器進行驗證前進行客戶端驗證,。不同處在於開發組不需要編寫JScript代碼,驗證控件會自動生成合適的代碼。
當提交漏洞報告或一般的LAME報告時,需要同時提交所使用產品的版本。在大多數情況下,用戶可以從下拉列表中選出版本號,而唯一的驗證就是檢查用戶是否選擇了一個版本號(參見圖6)。但在某些情況下,比如未列出所用的版本時,用戶需要手動輸入版本號。在這種情況下,可以用兩種格式來輸入版本號,在提交到服務器前將檢查格式是否正確。用來完成這種驗證的JScript代碼可能很復雜,但如果使用RegularExpressionValidator控件,只要定義正確的表達規則就可以進行驗證了。下面這段代碼使用了RegularExpressionValidator控件,並設置了可以完成這種檢查的屬性。
<ASP:RegularExpressionValidator id=txtBuildValueValidator
runat="server" display="dynamic" controlToValidate="txtBuild"
errorMessage="Also, please enter the Build Version in
the following format: NN.NN.NN.NNNN "
validationExpression="\d{2}.\d{2}.\d{2}.\d{4}|\d{4}">##
</ASP:RegularExpressionValidator>
用於報告漏洞的Web Service
這次移植還要增加報告漏洞的輸入容量,並用Web Service來實現漏洞報告。為了有效的發布有關Visual Studio .NET和.Net框架的信息,Microsoft建立了許多包含了例子和信息的Web站點。這些站點需要一種機制,允許用戶通過其它的Web站點報告漏洞,並將這些信息貯存在庫中。站點還要求能實現離線報告漏洞,這樣用戶可以一次將許多漏洞發送到站點。要想實現這些目標,我們應該使用Web Service來完成報告漏洞的任務。
為了便於分類管理漏洞報告,而且能讓合適的開發組看到報告,在一份漏洞報告中還需要提交許多其它數據(比如操作系統、語言、產品、地區等)。為了能讓客戶端應用程序提供豐富、有用的接口,有必要向客戶端應用程序提供這些信息。為了能適用於更多的程序,開發組決定使用XML來傳輸數據。
為了簡化報告漏洞服務的使用,開發組開發了多種接口,並實現了用多種方法保存報告。一個接口要求用戶提供與漏洞報告數據有關的ID值,另一個接口允許客戶端應用程序用字符串提交其它數據。如果采用後一種方式,漏洞報告服務將把字符串轉變為相關的ID,並通過漏洞報告組件完成驗證並保存。
原來的用Visual Basic 6.0開發的漏洞報告組件使用ADO與客戶端程序進行數據交換。為了實現用XML傳輸數據,我們可以使用ADO記錄的adPersistXML格式將記錄中的數據轉變為XML文檔。最後還要將得到的XML漏洞報告轉變為ADO記錄,以便用Visual Basic 6.0的組件進行處理。
開發小組決定在Visual Basic .NET中重新編寫報漏洞的類,這樣可以充分利用ADO.NET中基於XML的dataset。這樣做使得他們一方面可以方便地將數據以XML的形式提供給客戶端的應用程序,同時,還可以使用Visual Basic .Net組件中簡單易用的對象接口與數據進行交互。
一般說來,編寫轉換數據格式的代碼是一種更為安全的選擇。但考慮到我們遷移工程的主要目的是為了體驗一下新的技術,采取這樣的轉換方法還是有一定的實際意義的。