摘要:該文闡述了校園分布信息系統的設計思想,提供了一種系統組件設計框架,并以校園信息化系統為例,說明分布式系統的可復制的設計模式。
關鍵詞:NET平臺;分布式程序;校園信息系統
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2010)03-630-02
NET Platform for Campus-based Distributed Information System Design and Implementation
WU Ping-gui
(Department of Software Technology Banan District, Chongqing Zhengda Software Vocational and Technical College, Chongqing 400056, China)
Abstract: This paper describes the distribution of information systems on campus design concept provides a systematic framework for component design, and campus information system to illustrate a distributed system design patterns that can be replicated.
Key words: NET platform; distributed programming campus; information system
當學校超過一定規模后,信息化建設顯得尤其重要。員工的流動性大,人事信息管理系統中的數據頻繁更新;學生的流失大,學生管理系統中的數據經常更新,也會引起后勤處和財務處的存儲信息更新。由于部門之間數據橫向交流困難,經常引起數據更新滯后,如:財務處前一周才從人事處要來了員工變動的信息,到學生處要來學生變動的數據。本周又有員工辭職,財務處的員工數據又滯后了。如何解決這一問題,需要建立分布式的數據共享系統。
1 定義解決方案
校園信息系統由4個子系統和2個服務組件。4個子系統分別為人事考勤管理系統,學生管理系統,后勤物資管理系統,財務管理系統。2個服務組件由windows service和web service組成。 如圖1所示。
四個子系統中的采用了數據相對獨立原則,使用了SQL SERVER數據庫和ORACLE數據庫存取數據。共享數據通過web service向外發布,目的能使用數據保持最新狀態;windows service主要任務處理日常工作中的上傳各種文件,如:請假銷假、各種報表、數據匯總等等,用WINDOWS文件系統事件來確保無論文件何時到達都會通知系統,這相當于用一個簡單可靠的途徑來完成類似隊列的操作。采用輪詢數據庫或手工瀏覽目錄會導致系統負擔。
2 定義數據層
在人事考勤管理系統,學生管理系統,后勤物資管理系統,財務管理系統四個子系統中,需要根據自身的業務設計數據庫和數據表,存儲業務需要的數據。在設計數據表時,需要額外注意要與上傳文件的相匹配,如果上傳的是EXECL報表,需要從報表中抽取出重要的信息,存入數據表中去。在設計數據庫時,要注重使用視圖、索引和存儲過程,提高數據的存取速度。
3 定義windows service
windows service的主要任務是掃描Execl和Word文檔,從中抽取數據存入數據表中去,因為windows service始終是連續運行。當一個新的Execl文件出現在指定目錄下時,它被觸發,將數據轉換到數據庫中并將文件移到新目錄下。為了使用這個任務能自動執行,可以使用System.IO命名空間中的File System Watcher類。這個類有一個用途:當文件系統發生某一改變時由操作系統發送通知到程序。這使得不需要采用資源輪詢的方法來響應如創建、刪除或修改一個文件操作。為了使用File System Watcher類,需要執行3個簡單的步驟:
1) 設置path屬性,指出要監聽的目錄(如:D:\\ExeclFile.xls)。
2) 設置Filter屬性,指出要監聽的文件類型(如:*.xls)。
3) 設置要監聽變化,設置NotifyFilter屬性,指出需要監聽的變化類型。
FileSystemWatcher類有4種事件:Changed、Created、Deleted、Renamed。其中,Created、Deleted、Renamed比較容易處理。難點是處理Changed事件,需要使用NotifyFilter屬性來指出你所查找的變化類型(如,文件大小改變或文件名稱改變)。否則,程序將被不停的一系統文件修改信息淹沒。如果監聽變化,還需要設置InternalBufferSize屬性來確保快速連續發生變化的數據不會丟失。另外,由于windows service難以調試,程序產生異常不會拋出消息,要將此消息寫入windows系統事件日志中去,便于對系統進行維護。
4 定義web service
web service的主要功能是四個子系統中橫向交流數據通過web服務的接口向外界發布,所以對安全性要求比較高,采用了表單驗證。表單需要配置web.config文件,其代碼如下:
向外發布的web服務接口C#代碼如下:
[WebMethod]
public bool Login(string sUsername,string sPwd)
{if (FormsAuthentication.Authenticate(sUsername, sPwd) == true)
{FormsAuthentication.SetAuthCookie(sUsername,true);
return true;}
else
return 1;}
5 監視日志
不論對系統的設計、組件的分離、體系結構的簡化做得多好,分布式應用程序始終是個復雜的系統。當分布式應用程序運行失敗時,很難追蹤到問題的原因或者組件發生錯誤的地方。這個問題對任何大型系統都存在,但是對于分布式系統中的組件分布到多臺計算機、站點和不同的地理位置時,它就顯得特別重要。要解決這個問題,需要創建可靠的日志記錄底層結構。通常有四種方法:windows事件日志、直接寫入數據庫、消息隊列、郵件;可以采用消息隊列,消息隊列能夠解決離線操作。使用消息隊列分三步:創建消息隊列、查找消息隊列、發送消息隊列。其C#代碼如下:
class Program
{static void Main()
{try
{ if (!MessageQueue.Exists(@\".\\Private$\\MyPrivateQueue\"))
{MessageQueue.Create(@\".\\Private$\\MyPrivateQueue\");}
BinaryMessageFormatter formatter = new BinaryMessageFormatter();
MessageQueue queue = new MessageQueue(@\".\\Private$\\MyPrivateQueue\");
queue.Formatter = formatter;
queue.Send(\"Sample Message\", \"Label\");}
catch (MessageQueueException ex)
{Console.WriteLine(ex.Message);} }}
參考文獻:
[1] Nagel C.C#高級編程[M].6版.李銘,譯.北京:清華大學出版社,2008.
[2] Basiura R.ASP.NET web服務高級編程[M].楊浩,譯.北京:清華大學出版社,2002.