SendMSMQMessage
SendMSMQMessage 示例演示如何从基于 .NET 的应用程序向 MSMQ 端口发送消息。 它还提供了有关如何配置 Microsoft BizTalk Server以使用 MSMQ 接收位置的说明。
应注意消息队列中的许多操作都是异步的。 也就是说,许多 MSMQ API 调用 (例如 System.Messaging.MessageQueue.Send) 请求的操作完全完成之前返回到调用方。 MSMQ 提供了一种在操作完成之后将反馈传送到应用程序的机制。 此机制涉及使用“管理员队列”。MSMQ 以管理员队列中的消息形式返回反馈。 MSMQ 将向其返回反馈的管理队列是在进行原始 MSMQ API 调用时指定的。 因此,例如,在使用 System.Messaging.MessageQueue.Send API 发送消息时,应用程序可以使用调用 System.Messaging.MessageQueue.Send 中传递的消息上的 PROPID_M_ADMIN_QUEUE message 属性来指定管理员队列的名称。 尽管应用程序可能会在 System.Messaging.MessageQueue.Send 调用上获得成功的返回代码,但如果消息发送操作随后失败,MSMQ 会将具有此效果的消息写入指定的管理员队列。 如果应用程序未指定管理员队列,则发送失败会导致消息丢失,并且未捕获任何诊断 ,实际上,消息将消失,没有任何证据。 MSMQ 中有许多错误情况可能导致这种情况发生,例如,向事务队列执行非事务性发送。
在此示例的上下文中,代码在调用 System.Messaging.MessageQueue.Send 时指定与消息发送到的队列指定的事务支持一致的事务类型非常重要。 如果未执行此操作,并且未 (指定管理员队列(如此示例) 中所示),则 MSMQ 将放弃已发送的消息,并且没有指示它已这样做, (,即没有返回错误代码,没有诊断写入事件日志,等等) 。
<Samples Path>\AdaptersUsage\SendMSMQMessage\
下表显示了本示例中的文件及其用途说明:
文件 | 说明 |
---|---|
App.ico、AssemblyInfo.cs、SendMSMQMessage.csproj、SendMSMQMessage.sln | 为此示例的简单图形应用程序提供项目、解决方案和相关文件。 |
Form1.cs、Form1.resx | 为此示例的简单图形应用程序提供 Microsoft Visual C#.NET 源和表单文件。 |
可以使用此示例附带的简单图形应用程序中的代码作为如何将消息发送到来自 BizTalk Server 内的 MSMQ 接收位置的示例。启用 NET 的应用程序(例如 Microsoft Office)来自 ASP.NET 页等。
使用 Visual Studio 打开解决方案文件 SendMSMQMessage.sln。
在 “生成” 菜单上,单击 “生成解决方案” 。
使用以下过程配置BizTalk Server并创建 MSMQ 队列以运行示例。
单击“ 开始”,右键单击“ 计算机”,然后单击“ 管理”。
展开“ 功能” 节点。 如果未安装 消息队列 ,请右键单击“ 功能 ”,然后选择“ 添加功能”。 检查 消息队列,单击“ 下一步”,然后单击“ 安装 ”以在该系统上安装 MSMQ。
展开 “消息队列” 节点。
右键单击“ 专用队列 ”节点,单击“ 新建”,然后单击“ 专用队列”。
在 “队列名称”下,输入
test
。 确保选中“事务检查”框。单击 “确定” 。
单击“ 开始”,右键单击“ 计算机”,然后单击“ 管理”。
展开 “服务和应用程序”,然后展开 “消息队列” 节点。
备注
如果计算机中未安装消息队列,请转到“控制面板>程序和>功能”,然后选择“打开或关闭 Windows 功能”。 检查 Microsoft 消息队列 (MSMQ) 服务器下的所有功能,然后单击“ 确定”。
右键单击“ 专用队列 ”节点,单击“ 新建”,然后单击“ 专用队列”。
在 “队列名称”下输入 “测试”。 确保选中“事务检查”框。
单击 “确定” 。
选择存放接收消息的文件夹。 以下步骤假定您选择了 C:\Demo\Report,但如有必要,可调整这些步骤来使用其他文件夹。
打开 BizTalk Server 管理控制台。
创建名为 MSMQSample 的新应用程序。
右键单击“ 接收端口”,单击“ 新建”,然后单击“ 单向接收端口”。
在“ 接收端口属性 ”对话框的“ 名称 ”框中,输入 “MyReceivePort”,然后单击“ 确定”。
右键单击“ 接收位置”,单击“ 新建”,然后单击“ 单向接收位置”。 在 “选择接收端口 ”对话框中,选择刚刚创建的接收端口,然后单击“ 确定”。
在“ 接收位置属性 ”对话框的“ 名称 ”框中,键入接收端口的名称,例如 MSMQReceiveLocation。
在“ 接收位置属性 ”对话框中,对于传输类型,选择“ MSMQ ”。
单击“ 配置 ”打开“ MSMQ 传输属性 ”对话框。 将 “队列 ”设置为
localhost\private$\test
,将 “事务” 设置为True
,然后单击“ 确定”。展开应用程序,依次选择“ 发送端口”、“ 新建”、“ 静态单向发送端口”。
在“ 发送端口属性 ”对话框的“ 名称 ”框中,键入发送端口的名称,例如 MySendPort。
将 “传输类型” 属性设置为 “FILE”。
单击“ 配置 ”打开“ 文件传输属性 ”对话框。
在“ 文件传输属性 ”对话框中,将 “目标文件夹” 属性设置为 C:\Demo\Report,保留其他属性的默认设置,然后单击“ 确定”。
选择“ 筛选器”,然后通过将 “属性” 设置为 BTS 来添加新行 。ReceivePortName。 将 “运算符” 列设置为 ==,将 “值” 列设置为 “MyReceivePort”,然后单击“ 确定”。
右键单击新发送端口,然后单击“ 登记”。
再次右键单击新发送端口,然后单击“ 启动”。
右键单击新的接收位置,然后单击“ 启用”。
BizTalk Server现在已准备好使用此示例。
使用以下过程运行 SendMSMQMessage 示例。
在命令窗口中,导航到下面的文件夹:
<Samples Path>\AdaptersUsage\SendMSMQMessage\bin\Debug
运行文件 SendMSMQMessage.exe,这将启动提供本示例的用户界面的图形应用程序。
在图形应用程序的 “BizTalk 计算机名称 ”框中,键入本地计算机的名称。
尝试 “发送包装” 选项:
(可选)更改 “消息正文 ”框中的文本。
单击“ 已包装的发送”。
如果操作成功,则将看到以下内容:
按钮正上方的框中, “成功” 一词以红色字体显示。
将在目标文件夹 C:\Demo\Reports 中显示一个文件。 此文件包含 .NET 消息队列库包装在简单 XML 标记中的消息 正文 框中的文本。
如果操作失败,则将在按钮上方紧挨的框中显示一条错误消息。
尝试 “发送精确” 选项:
(可选)更改 “消息正文 ”框中的文本。
单击“ 确切发送”。
如果操作成功,则将看到以下内容:
按钮正上方的框中, “成功” 一词以红色字体显示。
将在目标文件夹 C:\Demo\Reports 中显示一个文件。 此文件包含消息 正文 框中的文本与文本框中的显示完全相同。
如果操作失败,则将在按钮上方紧挨的框中显示一条错误消息。