C# 从iSeries Websphere消息队列获取消息时发生MQRC_uu2;错误
我们正在使用以下代码和设置连接到iSeries上的IBM Websphere消息队列(版本IBM(R)Websphere(R)MQ V6.0.1) 我们针对同一MQ为三个不同的应用程序使用相同的uid和pwd 我们在一天中间歇性地收到C# 从iSeries Websphere消息队列获取消息时发生MQRC_uu2;错误,c#,ibm-mq,C#,Ibm Mq,我们正在使用以下代码和设置连接到iSeries上的IBM Websphere消息队列(版本IBM(R)Websphere(R)MQ V6.0.1) 我们针对同一MQ为三个不同的应用程序使用相同的uid和pwd 我们在一天中间歇性地收到MQRC_NOT_AUTHORIZED和MQRC_Q_MGR_NOT_AVAILABLE错误,但总是在get messages方法上收到错误 设置: MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING + MQC
MQRC_NOT_AUTHORIZED
和MQRC_Q_MGR_NOT_AVAILABLE
错误,但总是在get messages方法上收到错误
设置:
MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING + MQC.MQOO_INQUIRE
class WebSphereMQ
{
public bool impStatus { get; set; }
public MQQueueManager gMQQueueManager;
public MQQueue gMQQueue;
private MQMessage queueGetMessage { get; set; }
private MQGetMessageOptions queueGetMessageOptions { get; set; }
public MQQueueManager pMQQueueManager;
public MQQueue pMQQueue;
private MQMessage queuePutMessage { get; set; }
private MQPutMessageOptions queuePutMessageOptions { get; set; }
public WebSphereMQ()
{
impStatus = impersonation.impersonateValidUser(Common.impNme, "", Common.impPwd);
gMQQueueManager = null;
gMQQueue = null;
if (gMQQueue != null && gMQQueue.IsOpen)
{
// Just incase
gMQQueue.Close();
gMQQueueManager.Disconnect();
}
}
public bool connectMQGet(string QMgr, string QName, Hashtable connectionProperties, bool BrowseOnly, string QType)
{
try
{
gMQQueueManager = new MQQueueManager(QMgr, connectionProperties);
if (gMQQueueManager != null && QType == "OUT")
{
if (BrowseOnly)
gMQQueue = gMQQueueManager.AccessQueue(QName, MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_BROWSE + MQC.MQOO_FAIL_IF_QUIESCING + MQC.MQOO_INQUIRE);
else
gMQQueue = gMQQueueManager.AccessQueue(QName, MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING + MQC.MQOO_INQUIRE);
}
}
catch (MQException mqe)
{
if (impStatus) impersonation.undoImpersonation();
/* Write to log */
Common.logBuilder("WebSphereMQ --> connectMQGet <--", "MQException", Common.ActiveMQ, mqe.Message, "Exception");
/* Send email to support */
emailer.exceptionEmail(mqe);
return false;
}
return true;
}
将使用以下设置创建连接属性的哈希表:
MQC.TRANSPORT_PROPERTY = MQC.TRANSPORT_MQSERIES_MANAGED
MQC.CHANNEL_PROPERTY = SYSTEM.DEF.SVRCONN
MQC.HOST_NAME_PROPERTY = IP Address
我们使用以下打开选项:
MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING + MQC.MQOO_INQUIRE
class WebSphereMQ
{
public bool impStatus { get; set; }
public MQQueueManager gMQQueueManager;
public MQQueue gMQQueue;
private MQMessage queueGetMessage { get; set; }
private MQGetMessageOptions queueGetMessageOptions { get; set; }
public MQQueueManager pMQQueueManager;
public MQQueue pMQQueue;
private MQMessage queuePutMessage { get; set; }
private MQPutMessageOptions queuePutMessageOptions { get; set; }
public WebSphereMQ()
{
impStatus = impersonation.impersonateValidUser(Common.impNme, "", Common.impPwd);
gMQQueueManager = null;
gMQQueue = null;
if (gMQQueue != null && gMQQueue.IsOpen)
{
// Just incase
gMQQueue.Close();
gMQQueueManager.Disconnect();
}
}
public bool connectMQGet(string QMgr, string QName, Hashtable connectionProperties, bool BrowseOnly, string QType)
{
try
{
gMQQueueManager = new MQQueueManager(QMgr, connectionProperties);
if (gMQQueueManager != null && QType == "OUT")
{
if (BrowseOnly)
gMQQueue = gMQQueueManager.AccessQueue(QName, MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_BROWSE + MQC.MQOO_FAIL_IF_QUIESCING + MQC.MQOO_INQUIRE);
else
gMQQueue = gMQQueueManager.AccessQueue(QName, MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING + MQC.MQOO_INQUIRE);
}
}
catch (MQException mqe)
{
if (impStatus) impersonation.undoImpersonation();
/* Write to log */
Common.logBuilder("WebSphereMQ --> connectMQGet <--", "MQException", Common.ActiveMQ, mqe.Message, "Exception");
/* Send email to support */
emailer.exceptionEmail(mqe);
return false;
}
return true;
}
那么,我是否可以在客户端更改一些设置以防止我们获得这些异常,或者这是需要在iSeries/MQ上修改的内容
我们是否应该尝试为三个不同的应用程序使用不同的uid来访问MQ?MQ V6很久以前就停止使用了。您需要将队列管理器升级到受支持的版本 就2035年例外情况而言,有多种解决方法: 1) 您的MQ.NET应用程序必须存在于iSeries上并有权连接到队列管理器的用户id 2) 在iSeries队列管理器的SYSTEM.DEF.SVRCONN上设置MCAUSER 2035原因码上有很多帖子。请看T.Rob的以下文章以及这些文章中的链接