事务性 IBM MQ 9.0.0.3 .NET 监视器示例因 AMQ8377 而崩溃

Transactional IBM MQ 9.0.0.3 .NET Monitor sample crashes with AMQ8377

我正在尝试让 IBM WebSphere 9.0 文档中的事务性 .NET 监视器示例工作(请参阅使用 .NET 监视器,以下文档的第 675 页:ftp://public.dhe.ibm.com/software/integration/wmq/docs/V9.0/PDFs/mq90.develop.pdf

我设法编译一切正常(针对 .NET 2.0),但是当 运行 使用 runmqdnm 的监视器如下时,我得到一个异常:

runmqdnm -m myqmgr -q myqueue -a TransactionalMonitor.dll -c TransactionalMonitor.Monitor 
5724-H72 (C) Copyright IBM Corp. 1994, 2017.
AMQ8377: Unexpected error 2354 was received by the application. 

我直接在我的 MQ 服务器上 运行 样本,这是一台 Windows Server 2012 R2 机器,安装了 IBM MQ 9.0.0.3 服务器。

供参考,我实现的代码:

using System.EnterpriseServices;
using IBM.WMQ;
using IBM.WMQMonitor;

[assembly: ApplicationName("TransactionalMonitor")]

namespace TransactionalMonitor
{
    [Transaction(TransactionOption.Required)]
    public class Monitor : ServicedComponent, IMQObjectTrigger
    {
        [AutoComplete(true)]
        public void Execute(MQQueueManager qmgr, MQQueue queue, MQMessage message, string param)
        {
            System.Console.WriteLine("SETTING COMMIT");
            ContextUtil.SetComplete();
        }
    }
}

删除事务性内容时,示例工作正常。 我做错了什么?

您没有说明您实际使用的是哪个版本的 IBM MQ(您提到了 MQ V9 文档)。

我将使用您拥有的最旧版本的 .NET 编译您的出口。人们尝试使用最新的和最好的,但大多数时候它不起作用。

即对于 64 位 DLL

C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\csc.exe /nologo /t:library /platform:x64 /r:System.dll /r:"%MQ_FILE_PATH%\bin\amqmdnet.dll" /out:TransactionalMonitor.dll TransactionalMonitor.cs

仅供参考: 升级到版本 9.0.5 后问题已解决。 还要确保 MSRPC 和 MSDTC 端口未被防火墙阻止。 有关详细信息,请参阅 this blog post