基于.NET的事务提醒模块的设计与实现

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:tianyq
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:为了能在原有的办公系统中,当办公事务到来时能及时提醒办公人员,应用C#.NET技术﹑数据库技术和邮件服务系统,提出了用来实现此功能的事务提醒模块的设计思想和实现方法。该事务提醒模块对节省时间,提高办公效率既有重要的使用价值。
  关键词:C#.NET;SQL Server;Imail邮件服务系统;Windows服务
  中图分类号:TP319文献标识码:A文章编号:1009-3044(2007)18-31648-02
  The Design and Implement of Affair Alert Module Based on .NET
  WANG Chuan,SUN Bin
  (Faculty of Information Engineering,China University of Geosciences,WuHan 430074,China)
  Abstract:In order to alert office staff immediately when office affairs coming in an old office system, applying C#.NET﹑database technology and mail service system, it presents the design idea and implement means of an Affair Alert Module which implies this function.
  Key words:C#.NET;SQL Server;Imail Server system;Windows Service
  
  1 引言
  
  在原有的网络办公系统中,由于办公人员不可能一直登录办公系统去查询最新的事务信息,而新的事务请求可能会随时出现,这样有可能一些紧急事务得不到及时处理。若是在新的事务出现时能及时通知给办公人员,就可以弥补这个不足。可以在服务器加入一个事务提醒模块来实现这个通知的功能,该模块工作原理是:它每隔一段时间自动查询办公系统数据库,对办公系统数据库的事务工作流进行分析,从中获取新事务的详细信息,然后把这些信息用邮件发送到相关办公人员的邮箱中。办公人员可以在繁忙时,只需要打开邮件接收客户端,将其设置为定时自动收信,并使用新邮件到来时的语音提示,便可及时处理新的事务,提高办公效率。若办公人员出差在外,也可以通过查看邮件去了解事务的详细信息,为远程处理事务提供了有力的支持。
  
  2 事务提醒模块的功能结构设计
  
  如果将事务提醒模块设计为运行在服务器的Windows服务应用程序(Windows服务应用程序的特点是,它们会随系统启动时自动启动,可以长时间运行,可以暂停和重新启动,而且不显示任何用户界面),就可以不必对原有的办公软件做改动,只需要对数据库的结构加入一些字段就可以了,从而大大地减轻软件开发任务的负担和复杂度。
  事务提醒模块由三个子模块组成:(1)账户同步子模块;(2)信息收集子模块;(3)邮件发送子模块。下面将对这三个子模块的功能进行详细分析:
  2.1账户同步子模块
  如果要将事务信息发送邮件给办公人员,那么需要给每个办公人员一个办公用的邮箱账号,可以使用Imail邮件系统为办公人员提供邮件服务。在安装Imail邮件系统后,会提示需要指定Imail邮件系统的用户表的存放位置。为方便对用户表进行操作,我们将用户表设置为存放至外部数据库SQL Server 2005中。Imail邮件系统本身并没有提供比较方便的用户帐号远程管理程序,而办公系统数据库的用户表是可以远程管理的,完全可以将办公数据库的用户名和密码自动拷贝为该办公人员在邮件系统中用户名和密码。如果能将办公系统数据库的用户表中的用户名和密码和Imail邮件系统的用户表中的用户名和密码能够始终保持一致,那么就可以自动地对Imail邮件系统的用户进行管理,这样也完全符合我们的需要。
  账户同步子模块的功能是:对比办公数据库的用户表和Imail邮件系统用户表的用户名和密码,如果办公数据库的用户表中新加入了用户,它将这些新建用户记录的用户名和密码自动地复制到邮件系统的用户表的新记录中;如果办公数据库中删除了用户记录,它将这些用户对应地邮件帐户删除;如果办公数据库的用户表中某些用户更改了用户密码,它将邮件系统中这些用户的密码改得与办公系统数据库的用户密码一致。
  2.2信息收集子模块
  办公系统的每一个事务都会分阶段完成,事务在它的每个阶段都有不同的处理任务。在办公数据库中有一个事务工作流表,就是用来记录事务在每个阶段的处理任务。事务工作流表以工作流号和阶段号为关键字段,其中,工作流号字段表示一个事务的编号,通过它可以在办公数据库中查询出事务的内容信息;而阶段号表示事务的处理阶段编号,事务的处理任务按阶段进行编号。为了便于发送邮件,可以在办公数据库中建立一个邮件队列表,用来存放发送邮件所需要的全部信息。信息收集子模块用来完成这些信息的收集整理工作,并把这些信息存放包邮件队列表中。在事务工作流表中加入一个标志字段Queue_Flag,用来标志该事务处理阶段的完整信息是否已加入到邮件队列表中。
  信息收集子模块的功能就是:在事务工作流表中,对每条记录的标志字段Queue_Flag判断,对于没有加入到邮件队列表中的事务处理任务,根据任务的记录信息,在办公数据库中查询并整理出发信人的邮箱﹑收信人的邮箱﹑信件标题﹑信件内容正文等信息,然后将这些信息写入到邮件队列表的对应字段中。最后更改事务工作流表的标志字段Queue_Flag的值,表示已经将该事务处理任务加入了邮件队列表。
  2.3邮件发送子模块
  邮件发送子模块就是用来将邮件队列表中的记录以邮件发送的子模块。为了便于判断邮件队列表中的记录是否已经用邮件发送,需要为邮件队列表加一个标志字段Send_Flag,用来标志该条记录是否已被发送。
  邮件发送子模块的功能是:对邮件队列表中的记录的标志字段Send_Flag进行判断,对没有用邮件发送出去的记录,用邮件发送出去。最后改变标志字段Send_Flag的值,表示该条事务处理任务已经被发送给相应的办公人员邮箱,完成了事务提醒模块的提醒任务。
  2.4事务提醒模块功能结构图
  事务提醒模块由前述所说的三个子模块组成,它每隔一定的时间,会自动地将这三个子模块依次执行一次。只有保持邮件帐号存在并且真实的情况下,给此人发送邮件提醒才有意义,因而帐户同步子模块要最先运行。然后就是收集需要提醒的事务信息,用邮件发送出去,因而信息收集子模块随后执行,最后执行邮件发送子模块。这个执行顺序不可以颠倒,否则会出问题。
  事务提醒模块功能结构图如下:
  
  3 实现事务提醒模块的技术点
  
  3.1通过ADO.NET访问SQL Server 2005
  用ADO.NET访问数据库分为如下几个步骤,首先用类SqlConnection打开数据库连接,然后用类SqlCommand执行SQL语句访问数据库,用类SqlDataReader读取SQL语句的执行结果然后关闭类SqlDataReader,最后关闭数据库连接。现以帐户同步子模块中读取办公数据库用户表的源代码为例来说明如何访问数据库,该代码的功能是读出用户表的用户名和密码。
  string source = @"server=(local);" + "integrated security=SSPI;" + "database=办公数据库";
  SqlConnection conn = new SqlConnection(source);
  conn.Open();
  string sele = @"SELECT TOP 1 用户名,密码 FROM 办公数据库.用户表";
  SqlCommand cmd = new SqlCommand(sele, conn);
  SqlDataReader read = cmd.ExecuteReader();
  read.Read();
  string username = read[0].ToString().Trim();
  string password = read[1].ToString().Trim();
  read.Close();
  conn.Close();
  3.2用System.Net.Mail发送邮件
  C#发送电子邮件需要使用.net 2.0中新的命名空间System.Net.Mail中的类MailMessage和类SmtpClient。在类MailMessage的属性中存放发信人邮箱,收信人邮箱、信件标题、信件内容正文,然后用类SmtpClient发送的电子邮件。源代码中变量sender传递的是发信人的邮箱,变量receiver传递的是收信人的邮箱,变量subject传递的是信件标题,变量body传递的是信件内容正文,变量password传递的是发信人的邮箱密码,这些变量全部都可以从邮件队列表的相应字段中直接读取。
  MailMessage mail = new MailMessage(sender, receiver);
  mail.Subject = subject;
  mail.Body = body;
  mail.BodyEncoding = System.Text.Encoding.GetEncoding("GB2312");
  mail.SubjectEncoding = System.Text.Encoding.GetEncoding("GB2312");
  mail.IsBodyHtml = true;
  SmtpClient smtp = new SmtpClient(smtpserver);
  smtp.Credentials = new NetworkCredential(sender, password);
  smtp.Send(mail);
  3.3创建Windows服务应用程序
  事务提醒模块做成Windows服务应用程序分为以下四个步骤:
  (1)在从Visual C# 工程中选取Windows Services选项,给工程一个新文件名AlertService,然后点击确定,这时工程中自动生成了一个服务类AlertService。在该类中OnStart方法里添加语句,AlertServer abc = new AlertServer()。
  (2)在该工程中新建一个AlertServer类,然后将事务提醒模块的三个子模块的实现代码放入到该类中。打开AlertServer类的设计视图,然后在工具箱中用鼠标拖过来一个Timer组件。双击Timer组件的图标,在AlertServer的Ontimer事件代码中加入三个子模块的方法,让它们在OnTimer事件出现时都按顺序执行一次。通过设置Timer组件的Interval属性来决定了事务提醒模块隔多久运行一次。
  (3)在工程的解决方案资源管理器中,打开AlertService的设计视图,在设计视图窗口中,在鼠标右键弹出菜单中单击添加安装程序,这时项目中就添加了一个新类ProjectInstaller和两个安装组件ServiceProcessInstaller和 ServiceInstaller。单击ServiceInstaller组件并将它的 StartType属性设置为Automatic。这样每次计算机重新启动时,事务提醒模块都会自动启动。
  (4)通过Visual Studio的生成菜单中选择生成来生成项目后,在已编译可执行文件所在的目录中,可以看到名为AlertService.exe的可执行文件。在Visual Studio的命令提示下,进入AlertService.exe所在的目录,使用.NET的服务安装工具InstallUtil.exe来安装服务,在命令行中输入下列代码 InstallUtil AlertService.exe 。同样的,卸载服务的操作是,在命令行中输入下列代码 InstallUtil /u AlertService.exe 。
  安装好服务后,就可以通过运行“控制面板->管理工具->服务控制台程序”来启动或停止事务提醒模块了。
  
  4 结束语
  
  该事务提醒模块已经在原办公系统的服务器安装使用,经过一定时间的测试运行,运行状态良好。通过把事务提醒模块加入办公系统中实现了事务的及时提醒功能,可节省时间,显著地提高工作效率。随着3G时代的到来,手机上网业务迅猛发展,用手机收发邮件也将会普及,办公人员在出门在外时也可以通过手机得到事务的提醒信息。因而事务提醒模块在办公系统中确实很有应用价值。
  
  参考文献:
  [1]Christian Nagel,Bill Evjen,Jay Glynn.李敏波.译.C#高级编程(第3版)[M].北京:清华大学出版社,2006.
  [2]Karli Watson,Christian Nagel.C#入门经典(第4版)[M].北京:清华大学出版社,2006.
  [3]System.Net.Mail 命名空间[EB/OL]. ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.NETDEVFX.v20.chs/cpref10/html/N_System_Net_Mail.htm.
  [4]Sikha Saha Bagui, Richard Walsh Earp. Learning SQL on SQL Server 2005[M]. O'Reilly, 2006.
  [5]在ADO.NET中连接和检索数据[EB/OL].
  ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/WD_ADONET/html/722e7f87-3691-46c6-87e8-7d159722d675.htm.
  注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
其他文献
摘要:目前,单信道MAC协议在网络负载较重时的冲突和退避,造成信道带宽浪费而使得协议效率不高。本文主要针对UWB应用在无线个域网络中的特定场景,提出了一种新的应用于分布式网络的私有多信道UWB MAC协议,既可以解决隐藏终端和暴露终端问题,又可以有效地分配信道资源,提高网络性能。  关键词:私有多信道;接入策略; MAC; UWB  中图分类号:TP393 文献标识码:A文章编号:1009-304
期刊
摘要:本文在阐述MPLS VPN技术基本原理的基础上,简单介绍了MPLS VPN模型和技术的优势,最后给出利用ATM组网和用户多方式接入的方案。  关键词:ATM;MPLS;VPN;多协议标签交换  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)18-31594-01  The Virtual Network Technology on MPLS  XU Li, ZH
期刊
摘要:剖析了开源入侵检测工具Snort的体系结构及其工作配置模式,为中小型网络配置入侵检测系统提供了可行的解决方案。  关键词:入侵检测系统;通用入侵检测框架;Snort  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)18-31585-02  Research and Analysis the System Framework of Snort  YU Kun, W
期刊
摘要:在分布式计算环境下,Web服务发现和服务匹配技术直接关系到全球网络信息资源获取和信息的有效利用。传统的Web服务匹配和发现过程是基于UDDI并在语法级实现的。因而服务匹配模型没有涉及到语义,鉴于语义在智能匹配系统中所起的作用,本文从语义匹配的角度着重分析服务匹配系统中存在的数据语义、功能语义和服务质量语义。  关键词:语义描述;UDDI;匹配模型;本体  中图分类号:TP393文献标识码:A
期刊
摘要:为说明数字视频监控所具有的模拟监控无法比拟的优点,本文较为详细的介绍了在S3C44B0X芯片上,基于嵌入式uClinux操作系统构建嵌入式Web服务器的网络视频监控系统的软件开发过程,并介绍了数字视频监控系统的硬件组成,阐明了嵌入式Web服务器的机制与机理,并结合具体的实践给出了一些相应的实现方法,以供业内同行参考使用。  关键词:嵌入式Web服务器;CGI;数字视频监控;设计  中图分类号
期刊
摘要:采用可视化设计工具C++Builder开发基于C/S架构的自动组卷系统,既要利用C++ Builder强大方便的数据库开发功能,又要利用Word强大的数据处理能力。本文在C++Builder基于OLE技术对Word 2000的调用方面进行了一些有益的探索,可以较为便捷地实现试题库系统试题的导入和导出。  关键词:OLE;试题库;自动组卷系统;C++ builder;Word 2000  中图
期刊
摘要:文章给出VC和Flash之间一种基于自定义字符串的双向消息互传机制,并应用该机制用VC和Flash联合实现进度条的效果。  关键词:Shockwave Flash Object控件;VC;通讯;双向消息互传; ActionScript  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)18-31634-01  Messages Exchanging Between
期刊
摘要:本文对自主机器人的运动目标检测和跟踪中的一些关键技术进行了研究,通过传统的帧间差分的改进,引入HSI差值模型、图像序列的连续差分图像运算、自适应分割算法、自适应阴影部分分割算法。实验结果表明该算法有效。  关键词:目标检测;HSI差值模型;自适应分割算法;机器人  中图分类号:TP391文献标识码:A文章编号:1009-3044(2007)18-31685-02    1 引言    运动目
期刊
摘要:随着3S技术、信息技术、网络技术和通讯技术的不断发展,矿产资源管理部门越来越依赖信息化。本文详细介绍了基于3S、C/S和B/S分布式结构进行的矿产资源执法管理信息系统的设计和实现的方法。  关键词:WebGis;Java;3S  中图分类号:P208文献标识码:A文章编号:1009-3044(2007)18-31638-02  Design and Implementation of MIS
期刊
摘要:在我们的工作中,B方法已被用在一些极其重要的软件项目中并获得了很大成功。其中有不少应用于生物学方面的成功范例,我们用B方法建立了流感病毒入侵免疫系统因子网络的形式化模型,利用了生物信息学的理念,把免疫系统当成一个网络化的分布式信息系统来研究,以期望通过这样的研究为感疫苗研制、流感诊断和免疫疗法研究提供帮助。  关键词:B方法;流感病毒;模型设计  中图分类号:TP311文献标识码:A文章编号
期刊