Запись исключений в очередь с MQ Extendend Transaction Client - PullRequest
2 голосов
/ 25 июня 2011

Я пытаюсь использовать .NET MQ Extended Transaction Client для общения с существующим администратором очередей на нашем предприятии. Я работаю на чистой установке Windows 2008 R2 с расширенным клиентом из пробной версии MQ 7.0.1.

Моя программа записывает в очередь, когда я закомментирую параметры TransactionScope и MQC.MQPMO_SYNCPOINT. С кодом транзакции я получаю следующее исключение при вызове q.Put ():

MQRC_UOW_ENLISTMENT_ERROR ReasonCode 2354

Вот моя полная программа:

using System;
using System.Collections.Generic;
using System.Text;
using IBM.WMQ;
using System.Transactions;

namespace MQSeries
{
class Program
{
    static void Main(string[] args)
    {
        var transOptions = new TransactionOptions();
        transOptions.IsolationLevel = IsolationLevel.Serializable;

        string queueManagerName = "MYQUEUEMANAGER";
        string queueName = "MYQUEUE";
        string channelName = "MYCHANNEL";
        string channelInfo = "myserver.com(1418)";

        MQQueueManager qm;

        using (var trans = new TransactionScope(TransactionScopeOption.Required, transOptions, EnterpriseServicesInteropOption.Full))
        {
            qm = new MQQueueManager(queueManagerName, channelName, channelInfo);

            // Set up the options on the queue we wish to open
            int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;

            var q = qm.AccessQueue(queueName, openOptions);

            // Define a WebSphere MQ message, writing some text in UTF format
            MQMessage hello_world = new MQMessage();
            hello_world.WriteUTF("Hello World!");

            // Specify the message options
            MQPutMessageOptions pmo = new MQPutMessageOptions(); // accept the defaults,
            pmo.Options = MQC.MQPMO_SYNCPOINT;

            // Put the message on the queue
            q.Put(hello_world, pmo);
        }

        qm.Disconnect();
    }
}
}

Обратите внимание, что эта программа не имеет вызова trans.Complete (). Таким образом, за исключением текущего исключения, я ожидаю, что сообщение в очереди будет откатано с транзакцией.

1 Ответ

2 голосов
/ 01 июля 2011

Оказалось, что это открытая проблема в клиенте v7. Мой клиент v7 XA общался с администратором очередей v6:

IC74808: СБОЙ ПРИМЕНЕНИЯ КЛИЕНТА MQ V7 XA ПРИ ПОДКЛЮЧЕНИИ К MQ V6 QUEUE MANAGER.

клиент WebSphere MQ v7 XA приложение выдает MQCONN Администратор очередей WebSphere MQ v6. Сбой MQCONN во время xa_open с код причины 2046, MQRC_OPTIONS_ERROR. Этот сбой в процессе MSDTC вызывает UOW_ENLISTMENT_ERROR, который MQRC = 2354. Это также приводит к сбой вызова xa_open с -3 (XAER_RMERR).

...