事务性 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。
我正在尝试让 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。