MQ .NET 程序集 MQC.USER_ID_PROPERTY 被忽略了吗?

MQ .NET Assemblies MQC.USER_ID_PROPERTY Ignored?

我目前正在使用 MQ .NET 程序集,并正在尝试读取各种队列的队列深度以供监视应用程序使用。我们的代码在 Java 中运行,但我们的新应用程序是在 C# 中,最好将所有这些逻辑保留在同一个应用程序中。

根据我在网上听到的消息,.NET 程序集忽略 MQC.USER_ID_PROPERTY 而是使用 运行 应用程序的用户 ID。真的没有办法覆盖这个吗?这看起来很奇怪feature/bug。我知道 MQC.TRANSPORT_PROPERTY 应该会影响 UserID 的推断方式,但是无论我设置为 MQC.TRANSPORT_MQSERIES_MANAGED 还是 MQC.TRANSPORT_MQSERIES_CLIENT,我都会在 Wireshark 中看到相同的 ID 并得到返回相同的错误 (MQRC_NOT_AUTHORIZED)。有没有其他人找到解决这个相当大的问题的方法?

properties = new Hashtable();
properties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);
properties.Add(MQC.HOST_NAME_PROPERTY, hostName);
properties.Add(MQC.PORT_PROPERTY, port);
properties.Add(MQC.CHANNEL_PROPERTY, channelName);
properties.Add(MQC.USER_ID_PROPERTY, userId);
properties.Add(MQC.PASSWORD_PROPERTY, "");

// create connection
queueManager = new MQQueueManager(queueManagerName, properties);

如果您使用的是 v8 之前的 MQ .NET 客户端(或者 MQ C 客户端),应用程序设置的用户 ID 不会发送到队列管理器。而是将登录的用户 ID 传递给队列管理器进行身份验证。这是 v8 之前的 MQ 版本的已知行为。

您可以开发和使用所谓的security exit来执行用户身份验证。安全出口针对存储库执行用户名和密码身份验证,例如 MQ 服务器上的本地操作系统或 LDAP 存储库。

如果适合,您也可以使用 SSL/TLS。否则,您可以向上移动以使用 MQ v8 来使用开箱即用的用户 id/password 身份验证。