Буфер нулевой в ImportMQMDMesageBuffer, вызывает сбой клиентского приложения - PullRequest
0 голосов
/ 10 января 2019

Мы столкнулись с трудной проблемой, я надеюсь, что кто-то может дать совет о том, как мы можем решить эту проблему.

В нашем журнале встречается следующее исключение XMSException:

IBM.XMS.XMSException: CWSMQ0282E: A null value has been used for argument BUFFER = <> NULL within method ImportMQMDMesageBuffer(WmqSession, WmqDestination, MQMD,byte[],int,int). 
The preceding method detected an invalid  null argument. 
If necessary, recode the application to avoid the error condition. 
   at IBM.XMS.Client.WMQ.WmqReceiveMarshal.ImportMQMDMesageBuffer(MQMessageDescriptor mqmd, Byte[] buffer, Int32 dataStart, Int32 dataEnd) 
   at IBM.XMS.Client.WMQ.WmqAsyncConsumerShadow.Consumer(Phconn hconn, MQMessageDescriptor mqmd, MQGetMessageOptions mqgmo, Byte[] pBuffer, MQCBC mqcbc) 
   at IBM.WMQ.Nmqi.UnmanagedNmqiMQ.NmqiConsumerMethodUM(Int32 hconn, IntPtr structMqmd, IntPtr structMqgmo, IntPtr buffer, IntPtr structMqcbc)

После этого XMSException происходит сбой службы Windows. Сложность в том, что мы не можем воспроизвести это поведение в нашей среде разработки. Мы все еще решаем проблемы, но не можем найти причину этой проблемы.

Ниже вы можете найти информацию о том, как мы осуществляем соединение:

Используемая версия: IBM.XMS 8.0.0.5

Соединение создается следующим образом:

XMSFactoryFactory factory = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ); 
IConnectionFactory cf = factory.CreateConnectionFactory(); 
cf.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT_UNMANAGED); 
cf.SetStringProperty(XMSC.WMQ_HOST_NAME, hostname); 
cf.SetStringProperty(XMSC.WMQ_PORT, port); 
cf.SetStringProperty(XMSC.WMQ_CHANNEL, channelname); 
cf.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, qmname); 
IConnection connection = cf.CreateConnection(); 

Сессия создается следующим образом:

ISession session = connection.CreateSession(false, AcknowledgeMode.AutoAcknowledge);

Пункт назначения создается следующим образом:

destination = session.CreateQueue("queuename"); 
destination.SetIntProperty(XMSC.WMQ_MESSAGE_BODY, XMSC.WMQ_MESSAGE_BODY_MQ); 
destination.SetBooleanProperty(XMSC.WMQ_MQMD_WRITE_ENABLED, true); 
destination.SetBooleanProperty(XMSC.WMQ_MQMD_READ_ENABLED, true);

Слушатель создается следующим образом:

IMessageConsumer consumer = session.CreateConsumer(destination); 
consumer.MessageListener = listenerDelegate;

То же самое XMSException также спрашивается здесь несколько лет назад. Я вижу, что они открыли PMR для этой проблемы, но без какого-либо обновления ...

1 Ответ

0 голосов
/ 29 марта 2019

28 марта 2019 года IBM выпустила APAR, который, по-видимому, точно соответствует проблеме, о которой вы сообщили.

IT28062: При получении пустого сообщения приложения XMS .Net сообщают о CWSMQ0282E и сбое.

К сожалению, APAR не включен ни в какие текущие выпуски MQ ( По состоянию на 29 марта ). Вам нужно будет либо дождаться выхода релиза, включающего этот APAR, либо попросить вашего клиента открыть PMR и попросить IFIX для этого APAR для версии MQ, которую вы используете.

APAR предназначен для следующих уровней обслуживания, я также добавил целевую дату для каждого уровня из Запланированные даты выпуска обслуживания IBM MQ .

Version    Maintenance Level   Planned Release Date
v8.0       8.0.0.12            2Q 2019
v9.0 LTS   9.0.0.7             2Q 2019
v9.1 LTS   9.1.0.3             Not noted yet, 9.1.0.2 is targeted for 2Q 2019
v9.1 CD    9.1.3               CD releases historically have been between
                               2 and 6 months apart.
                               9.1.2 was released March 21 2019.
...