2015-11-12 29 views
2

我目前正在使用MQ .NET程序集,并试图为监视应用程序读取各种队列的队列深度。我们的代码是用Java编写的,但是我们的新应用程序是用C#编写的,最好将所有这些逻辑保存在同一个应用程序中。MQ .NET程序集MQC.USER_ID_PROPERTY忽略?

从我所听说网上,.NET程序集忽略MQC.USER_ID_PROPERTY,而使用谁正在运行应用程序的用户ID。是否真的没有办法来覆盖这个?这似乎是一个非常奇怪的功能/错误。我知道MQC.TRANSPORT_PROPERTY应该影响UserID的推导方式,但是我是否设置为MQC.TRANSPORT_MQSERIES_MANAGEDMQC.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); 

回答

1

如果您使用的MQ .NET客户端(或与此有关的MQ C客户也)版本为V8之前,用户ID由应用程序设置不被发送到队列管理器。相反,登录的用户标识被传递给队列管理器进行认证。这是MQ版本v8之前的已知行为。

可以开发和利用所谓security exit进行用户认证。安全性出口对存储库执行用户名和密码认证,例如MQ服务器上的本地操作系统或LDAP存储库。

如果适合您,也可以使用SSL/TLS。否则,您可以向上移动以使用MQ v8来使用开箱即用用户标识/密码认证。

+0

谢谢Shashi的建议。这是基于我正在运行的程序集/客户端的版本还是服务器上的MQ版本? MQ版本是7.05,我无法控制,但在客户端,我使用8.0.0.4,并且问题仍在发生。 – tangelotangeloyo

+0

您需要MQ v8队列管理器才能正常工作。 – Shashi

+0

那么,这是一个无赖。但是,谢谢你终于为我解决这个问题!看起来我会用Java来做这件事。 – tangelotangeloyo