C# MQRC_对象_已_存在错误代码2100

C# MQRC_对象_已_存在错误代码2100,c#,ibm-mq,C#,Ibm Mq,我正在使用IBM WebSphere MQ。每当同时的用户登录到IBM MQ时,当第二个用户来尝试访问他们收到的getqueue时,2100 0x00000834 MQRC_对象_已存在错误。请提供一些建议 连接到MQ管理器: mqQueueManager = new MQQueueManager(mqQueueManagerName); 打开Put队列: mqPutQueue = mqQueueManager.AccessQueue(mqRequestQueueName, MQC.MQOO_

我正在使用IBM WebSphere MQ。每当同时的用户登录到IBM MQ时,当第二个用户来尝试访问他们收到的getqueue时,
2100 0x00000834 MQRC_对象_已存在
错误。请提供一些建议

连接到MQ管理器:

mqQueueManager = new MQQueueManager(mqQueueManagerName);
打开Put队列:

mqPutQueue = mqQueueManager.AccessQueue(mqRequestQueueName, MQC.MQOO_INQUIRE |
              MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING);
当第二个用户尝试连接时,打开ReplyTo队列会生成错误。第一个用户的动态队列在断开连接时将被删除。第二个用户无法连接,直到第一个用户关闭应用程序:

mqGetQueue = mqQueueManager.AccessQueue(mqModelQueueName, MQC.MQOO_INPUT_SHARED ,
   mqQueueManagerName, mqReplyQueueName, "");

您可能未正确指定动态队列名称

为了向开发人员提供最大的灵活性,WebSphere MQ允许在为动态队列选择您想要的确切名称或让WebSphere MQ自动生成唯一名称之间进行选择。如果希望WebSphere MQ为您生成名称,请确保传入的名称足够短,以允许WMQ附加其他字符,并在
DynamicQName
字段中指定星号作为最后一个字符。这在文档中的一个名为的章节中进行了解释,其内容如下:

可以通过以下三种方式指定创建的动态队列的名称:

  • 在文件的
    DynamicQName
    字段中提供所需的全名 MQOD结构
  • 为指定前缀(少于33个字符) 名称,并允许队列管理器生成名称的其余部分。 这意味着队列管理器生成一个唯一的名称,但是 仍然有一些控制(例如,您可能希望每个用户使用 一个特定的前缀,或者你可能想给一个特殊的安全性 分类到名称中带有特定前缀的队列)。使用 使用此方法,请为最后一个非空字符指定星号()
    DynamicQName
    字段的。不要为其指定单个星号() 动态队列名称
  • 允许队列管理器生成完整的 名称要使用此方法,请在第一行中指定星号(*)
    DynamicQName
    字段的字符位置
根据您描述的行为,我猜您传递给WMQ的名称中没有星号。因此,它假定您希望显式指定名称,并且完全按照您指定的方式执行,尽管可能不是您想要的方式


要获得预期的行为,请确保为
mqReplyQueueName
传递的值是一个星号(“
*
”字符),或者是一个少于33个字符且以星号结尾的字符串。

是否尝试创建动态队列?只有在尝试动态创建已存在的队列时,才会发生此错误。检查mqRequestQueueName和mqModelQueueName是否相同。是正确的,我不知道如何清除动态队列,这里mqpreplyQueueName保留动态队列名称mqRequestQueueName和mqModelQueueName不同我检查过。只有当我将其他名称指定为其creatingHi时,动态队列才会出现问题,我解决了动态队列名称mqReplyQueueName->的问题,每次它出现时,我都随机生成一个新的动态队列名称Yes,这是动态队列的预期设计。如果您希望从队列中获取多个应用程序实例,我建议使用永久队列。