C#訊息佇列應用程式

來源:互聯網
上載者:User

簡介

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:可伸縮、高可用性的Server Load Balancer解決方案(英文)”介紹了一種解決方案,用於高可用性訊息佇列 (MSMQ) 的可伸縮Server Load Balancer方案架構。此解決方案中涉及了一種將 Windows 服務用作智能訊息路由器的開發方案。這樣的解決方案以前只有 Microsoft Visual C++? 程式員才能實現,而 .NET 架構的出現改變了這種情況。從下面的解決方案中,您可以看到這一點。

.NET 架構應用程式

這裡介紹的解決方案是一種用來處理若干訊息佇列的 Windows 服務;其中每個隊列都是由多個線程進行處理(接收和處理訊息)。處理常式使用迴圈法技術或應用程式特定值(訊息 AppSpecific 屬性)從目的隊列列表中路由訊息,並使用訊息屬性來調用組件方法。(樣本進程也屬於這種情況。)在後一種情況下,組件的要求是它能夠實現給定的介面 IWebMessage。要處理錯誤,應用程式需要將不能處理的訊息發送到錯誤隊列中。

訊息應用程式的結構與以前的Active Template Library (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 命令。因為這些進程必須是無阻塞的,命令操作最終將在幕後處理線程上執行。

CWorkerThread 是一個抽象類別,被 CWorkerThreadAppSpecific 、CWorkerThreadRoundRobin 和 CWorkerThreadAssembly 繼承。這些類以不同的方式處理訊息。前兩個類通過給另一隊列發送訊息來處理訊息(其不同之處在於確定接收隊列路徑的方式),最後一個類則使用訊息屬性來調用組件方法。

.NET 架構內部的錯誤處理是以基類 Exception 為基礎的。當系統引發或捕獲錯誤時,這些錯誤必須是從 Exception 中匯出的類。CWorkerThreadException 類就是這樣一種實現,它通過附加額外屬性(用於定義服務是否應繼續運行)來擴充基類。

最後,應用程式套件組合含兩種結構。這些實值型別定義了輔助進程或線程的運行時參數,以簡化 CWorker 和 CWorkerThread 對象的結構。使用實值型別結構(而不是參考型別類)能夠確保這些運行時參數維護的是數值(而不是引用)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.