论文部分内容阅读
摘要:该文阐述了校园分布信息系统的设计思想,提供了一种系统组件设计框架,并以校园信息化系统为例,说明分布式系统的可复制的设计模式。
关键词: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 false;}
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.
关键词: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 false;}
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.