C#消息队列应用程序 -1,C#消息队列应用程序 -1
【 tulaoshi.com - ASP.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属性)从目的队列列
表中路由消息,并使用消息属性来调用组件方法。(示例进程也属于这种
情况。)在后一种情况下,组件的要求是它能够实现给定的接口IWeb
Message要处理错误,应用程序需要将不能处理的消息发送到错误队列中。
消息应用程序的结构与以前的活动模板库(ATL )应用程序相似,它
们之间的主要不同在于用于管理服务的代码的封装和 .NET 框架组件的使
用。要创建Windows服务,.NET框架用户仅仅需要创建一个从 ServiceBase
(来自System.ServiceControl程序集)继承的类。这毫不奇怪,因为.NET
框架是面向对象的。
应用程序结构
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com) 应用程序中主要的类是 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 命令。因为这些进程必须是无阻塞的,命令操
作最终将在后台处理线程上执行。
CWorkerThread 是一个抽象类,被 CWorkerThreadAppSpecific 、
CWorkerThreadRoundRobin 和 CWorkerThreadAssembly继承。这些类以不
同的方式处理消息。前两个类通过给另一队列发送消息来处理消息(其不
同之处在于确定接收队列路径的方式),最后一个类则使用消息属性来调
用组件方法。
.NET 框架内部的错误处理是以基类 Exception为基础的。当系统引
发或捕获错误时,这些错误必须是从 Exception中导出的类。CWorker
ThreadException 类就是这样一种实现,它通过附加额外属性(用于定义
服务是否应继续运行)来扩展基类。
最后,应用程序包含两种结构。这些值类型定义了辅助进程或线程的
运行时参数,以简化 CWorker和 CWorkerThread对象的结构。使用值类型
结构(而不是引用类型类)能够确保这些运行时参数维护的是数值(而不
是引用)。
IWebMessage 接口
CWorkerThread 的实现之一是一个调用组件方法的类。这个名为
CWorkerThreadAssembly 的类使用 IWebMessage接口来定义服务和组件之
间的约定。
与当前版本的 Microsoft Visual Studio?不同,
来源:http://www.tulaoshi.com/n/20160129/1492027.html
看过《C#消息队列应用程序 -1》的人还看了以下文章 更多>>