carl nolan
摘要:本文概述一种用于处理若干消息队列的 windows 服务解决方案,重点介绍 .net 框架与 c# 应用程序. 【程序编程相关:利用微软WebService技术实现远程】
microsoft corporation 【推荐阅读:C#v.sjava再贴+评点】目录 【扩展信息:.NET和COM之间的相互访问】
下载 csharpmessageservice.exe 示例文件 (86 kb)
简介
.net 框架应用程序 应用程序结构 服务类 检测设备 安装总结参考资料简介
microsoft 近期推出了一种用于生成集成应用程序的新平台——microsoft .net 框架..net 框架允许开发人员使用任何编程语言迅速生成与部署 web 服务与应用程序.microsoft intermediate language (msil) 与实时 (jit) 编译器使这种不依赖语言的框架得以实现.
与 .net 框架同时面世的还有一种新的编程语言 c#(读作“c sharp”).c# 是一种简单.新颖.面向对象与类型安全的编程语言.利用 .net 框架与 c#(除 microsoft® visual basic® 与 managed c++ 之外),用户可以编写功能强大的 microsoft windows® 与 web 应用程序及服务.本文提供了这样的一个解决方案,它的重点是 .net 框架与 c# 而不是编程语言.c# 语言的介绍可以在“ c# 简介与概述(英文)”找到.
近期的文章“msmq:可伸缩.高可用性的负载平衡解决方案(英文)”介绍了一种解决方案,用于高可用性消息队列 (msmq) 的可伸缩负载平衡解决方案体系结构.此解决方案中涉及了一种将 windows 服务用作智能消息路由器的开发方案.这样的解决方案以前只有 microsoft visual c++® 程序员才能实现,而 .net 框架的出现改变了这种情况.从下面的解决方案中,您可以看到这一点.
.net 框架应用程序
这里介绍的解决方案是一种用来处理若干消息队列的 windows 服务;其中每个队列都是由多个线程进行处理(接收与处理消息).处理程序使用循环法技术或应用程序特定值(消息 appspecific 属性)从目的队列列表中路由消息,并使用消息属性来调用组件方法.(示例进程也属于这种情况.)在后一种情况下,组件的要求是它能够实现给定的接口 iwebmessage.要处理错误,应用程序需要将不能处理的消息发送到错误队列中.
消息应用程序的结构与以前的活动模板库 (atl) 应用程序相似,它们之间的主要不同在于用于管理服务的代码的封装与 .net 框架组件的使用.要创建 windows 服务,.net 框架用户仅仅需要创建一个从 servicebase(来自 system.servicecontrol 程序集)继承的类.这毫不奇怪,因为 .net 框架是面向对象的.
应用程序结构
应用程序中主要的类是 servicecontrol,它是从 servicebase 继承的.因而,它必须实现 onstart 与 onstop 方法,以及可选的 onpause 与 oncontinue 方法.事实上,类是在静态方法 main 内构造的:
using system; using system.serviceprocess; public class servicecontrol: servicebase { // 创建服务对象的主入口点 public static void main() { servicebase.run(new servicecontrol()); } // 定义服务参数的构造对象 public servicecontrol() { canpauseandcontinue = true; servicename = "msdnmessageservice"; autolog = false; } protected override void onstart(string[] args) {...} protected override void onstop() {...} protected override void onpause() {...} protected override void oncontinue() {...} }servicecontrol 类创建一系列 cworker 对象,即,为需要处理的每个消息队列创建 cworker 类的一个实例.根据定义中处理队列所需的线程数目,cworker 类依次创建了一系列的 cworkerthread 对象.cworkerthread 类创建的一个处理线程将执行实际的服务工作.
使用 cworker 与 cworkerthread 类的主要目的是确认服务控件 start.stop.pause 与 continue 命令.因为这些进程必须是无阻塞的,命令操作最终将在后台处理线程上执行.
... 下一页