排队组件技术示例
更新:2007 年 11 月
此示例演示了 .NET 应用程序与 Microsoft 消息队列 (MSMQ) 技术和 COM+ 的排队组件功能进行的交互。使用 MSMQ,应用程序可以通过可能暂时处于脱机状态的网络和系统进行通信。发送应用程序所生成的消息存储在队列中,所以接收应用程序稍后可以对这些消息进行检索。排队组件基于 MSMQ 生成,可以用来提供服务器组件的异步调用和执行。
重要说明: |
---|
若要生成并执行此示例,必须已在“工作组”模式下将 MSMQ 安装到计算机上。 |
有关使用这些示例的信息,请参见下面的主题:
使用命令提示生成示例
打开命令提示窗口,定位到 Technologies\ComponentServices\QueuedComponents 目录下语言特定的子目录之一。
根据所选的编程语言,在命令行中键入 msbuild QueuedComponentsCS.sln 或 msbuild QueuedComponentsVB.sln。
使用 Visual Studio 生成示例
打开 Windows 资源管理器,定位到 Technologies\ComponentServices\QueuedComponents 目录下语言特定的子目录之一。
根据所选的编程语言,双击 QueuedComponentsCS.sln 或 QueuedComponentsVB.sln 的图标,在 Visual Studio 中打开该文件。
在“生成”菜单上单击“生成解决方案”。
在 GAC 中注册并安装程序集
定位到包含生成的程序集的目录。
在命令行中键入 regsvcs QCDemoSvr.dll,以注册程序集。
在命令行中键入 gacutil –i QCDemoSvr.dll,以在 GAC 中安装程序集。
运行示例
打开命令提示窗口或 Windows 资源管理器,定位到包含新的可执行文件的目录。
在命令行中键入 QCDemo.exe,或者在 Windows 资源管理器中双击 QCDemo.exe 将其启动。
单击标有“Send Queued Msg”(发送排队消息)的按钮。在文本编辑字段中更改字符串值,然后再次单击“Send Queued Msg”(发送排队消息)。这会在队列中放置两个打包的方法调用。
检查 QCDemoSvr 队列中的消息。右击“我的电脑”,然后从弹出菜单中选择“管理”。在计算机管理控制台中,展开“服务和应用程序”->“消息队列”->“公共队列”。此时,一个名为 qcdemosvr 的队列应该显示在此节点中。队列名称对应于保留排队组件的 COM+ 应用程序的名称。此应用程序在稍后的步骤中进行检查。
展开 qcdemosvr,然后选择“Queue”消息。此时,右侧窗格中应该显示两则消息,这些消息对应于在客户端应用程序中进行的两个排队组件方法调用。
启动组件服务管理工具。
通过在左侧的 COM+ 资源管理器窗格中展开“组件服务”->“计算机”->“我的电脑”->“COM+ 应用程序”,定位 QCDemoSvr COM+ 应用程序。
右击 QCDemoSvr 应用程序,然后从弹出菜单中选择“启动”。此时,将会激活该服务器组件。侦听器/播放器将消息从 qcdemosvr 队列和调用中放入服务器中。因此,应该显示两个消息框,其中包含来自示例客户端应用程序的原始调用中的文本字符串。
可以返回到计算机管理控制台,以便确认 qcdemosvr 不再包含排队消息。客户端应用程序发出的后续调用直接传递到服务器。每单击一次按钮,将会立即显示消息框。
说明: 在 Windows 2000 中,必须关闭 QCDemoSvr COM+ 应用程序(方法是在 COM+ 资源管理器中右击该应用程序,然后选择“关闭”),才能返回到排队消息。只有关闭 QCDemo 客户端可执行文件之后,才能关闭 QCDemoSvr COM+ 应用程序。
卸载示例
定位到运行 msbuild.exe 或启动 .sln 文件时所在的目录。
根据所选的编程语言,在命令提示处键入 msbuild.exe QueuedComponentsCS.sln /t:Clean 或 msbuild.exe QueuedComponentsVB.sln /t:Clean。此操作将会使用 /u 开关调用 .NET 服务安装工具 (Regsvcs.exe) 和全局程序集缓存工具 (Gacutil.exe),以便从 COM+ 目录和全局程序集缓存中移除示例文件。
要求
**平台:**Windows 2000、Windows XP、Windows Server 2003
**.NET Framework 版本:**2.0、1.1、1.0
备注
有关二进制文件的创建和注册步骤示例的更多信息,请查看源代码文件中的注释。
排队组件是在消息队列服务 (MSMQ) 的顶部生成的 COM+ 功能。消息队列服务可以提供一种机制,用于异步调用和执行组件。当客户端对排队对象发出调用时,该调用实际上是对记录器发出的。记录器可以将该调用打包成消息,然后将该消息放置在队列中。侦听器读取队列中的消息,然后将该消息传递给播放器。播放器对服务器对象发出实际的方法调用。组件服务管理工具中所示的组件名称的 C# 版本为 QCDemoServerCS.QComponent。Visual Basic 版本为 QCDemoServerVB.QComponent。
说明: |
---|
必须通过注册 QCDemoSvr.dll 程序集设置消息队列,然后将该程序集安装到全局程序集缓存 (GAC) 中。.NET 服务安装工具 (regsvcs.exe) 位于 %系统根目录%\Microsoft.Net\Framework\<运行库版本> 目录中,全局程序集缓存工具 (gacutil.exe) 位于 \SDK\<版本>\Bin 目录中。 |
只有激活服务器,才能接收排队消息。可以结合使用脚本和任务计划程序,也可以采用编程的方式,来手动激活服务器组件。此示例手动激活服务器组件。
此示例包含客户端应用程序以及标记为 InterfaceQueuing 的托管对象。侦听器是通过类属性启用的。生成应用程序时,COM+ 将会创建一个队列,该队列与指定的 COM+ 应用程序的名称相同。
客户端应用程序包含一个按钮。单击该按钮时,将会通过队列名字对象调用排队组件记录器。通过返回的引用而发出的全部调用都打包并放置在相应的消息队列中。
如果在组件服务管理工具中激活实际服务器组件,排队方法调用会解除打包并传递到该组件。示例服务器显示了一个简单的消息框,用以说明调用已经到达该服务器。
请参见
参考
System.Runtime.InteropServices