Exemplo n.º 1
0
        internal void LogCurrentTransactionStart(byte[] xidBytes, MQXid xid, Guid queueManagerUid, int rmid, byte[] recinfo)
        {
            uint method = 0x52b;

            this.TrEntry(method, new object[] { xidBytes, queueManagerUid, rmid, recinfo });
            try
            {
                MQMessage mqMsg = new MQMessage();
                mqMsg.Persistence = 1;
                int     compCode = 0;
                int     reason   = 0;
                sbyte[] dst      = new sbyte[queueManagerUid.ToByteArray().Length];
                Buffer.BlockCopy(queueManagerUid.ToByteArray(), 0, dst, 0, dst.Length);
                base.TrText(method, "Qmid=" + NmqiTools.ArrayToHexString(queueManagerUid.ToByteArray()));
                sbyte[] numArray2 = new sbyte[recinfo.Length];
                Buffer.BlockCopy(recinfo, 0, numArray2, 0, numArray2.Length);
                base.TrText(method, "recordinfo=" + NmqiTools.ArrayToHexString(recinfo));
                sbyte[] numArray3 = new sbyte[xidBytes.Length];
                Buffer.BlockCopy(xidBytes, 0, numArray3, 0, numArray3.Length);
                base.TrText(method, "recordinfo=" + NmqiTools.ArrayToHexString(xidBytes));
                mqMsg.SetBytesProperty("dnet.XARECOVERY_QMID", dst);
                mqMsg.SetBytesProperty("dnet.XARECOVERY_RECINFO", numArray2);
                mqMsg.SetBytesProperty("dnet.XARECOVERY_XID", numArray3);
                mqMsg.SetIntProperty("dnet.XARECOVERY_RMID", rmid);
                mqMsg.SetDoubleProperty("dnet.XARECOVERY_TTIMEOUT", TransactionManager.MaximumTimeout.TotalMilliseconds);
                mqMsg.SetStringProperty("dnet.XARECOVERY_HOSTANDUSER", this.hostAndUser);
                this.marshal = new MQMarshalMessageForPut(mqMsg);
                mqMsg        = this.marshal.ConstructMessageForSend();
                byte[] sBuff           = mqMsg.GetBuffer();
                MQMessageDescriptor md = mqMsg.md;
                this.recoveryHconn.Session.MQFap.MQPUT(this.recoveryHconn, this.recoveryHobj.HOBJ, ref md, ref this.recoveryPutPmo, sBuff.Length, sBuff, null, 1, out compCode, out reason);
                base.TrText(method, "MessageId-" + NmqiTools.ArrayToHexString(md.MsgId));
                if (compCode != 0)
                {
                    base.throwNewMQException(compCode, reason);
                }
                this.TransactionLogList.Add(xid, mqMsg.md);
                this.marshal.Dispose(false);
                this.marshal = null;
                mqMsg        = null;
                sBuff        = null;
            }
            finally
            {
                base.TrExit(method);
            }
        }
Exemplo n.º 2
0
        public void Put(MQMessage message, MQPutMessageOptions pmo)
        {
            uint method = 0x7d;

            this.TrEntry(method, new object[] { message, pmo });
            int options   = 0;
            int pCompCode = 0;
            int pReason   = 0;

            try
            {
                if (message == null)
                {
                    base.throwNewMQException(2, 0x7ea);
                }
                if (pmo == null)
                {
                    base.throwNewMQException(2, 0x87d);
                }
                pmo.ValidateOptions();
                options = pmo.Options;
                if ((pmo.Options & 6) == 0)
                {
                    base.TrText(method, "Setting explicit NO_SYNCPOINT");
                    pmo.Options |= 4;
                }
                if ((Transaction.Current != null) && !base.qMgr.IsXAEnabled)
                {
                    base.qMgr.IsXAEnabled = true;
                }
                byte[] src = message.GetBuffer();
                this.tempMsgBuffer = new byte[src.Length];
                Buffer.BlockCopy(src, 0, this.tempMsgBuffer, 0, src.Length);
                int    characterSet = message.CharacterSet;
                int    encoding     = message.Encoding;
                string format       = message.Format;
                this.PerformMsgProcessgingBeforePut(ref message);
                src = message.GetBuffer();
                if (!base.qMgr.IsHconnValid)
                {
                    base.throwNewMQException(2, 0x7e2);
                }
                base.qMgr.nmqiConnector.MQPUT(base.qMgr.hConn, base.hObj, message.md, pmo, src.Length, src, out pCompCode, out pReason);
                if (pCompCode == 0)
                {
                    this.PerformMsgProcessingAfterPut(ref message, this.tempMsgBuffer, characterSet, encoding, format);
                }
                if (pCompCode != 0)
                {
                    base.qMgr.CheckHConnHealth(pReason);
                    base.throwNewMQException(pCompCode, pReason);
                }
            }
            catch (MQException exception)
            {
                pCompCode = exception.CompCode;
                pReason   = exception.Reason;
                throw exception;
            }
            catch (Exception exception2)
            {
                base.TrException(method, exception2);
                pCompCode = 2;
                pReason   = 0x893;
                throw exception2;
            }
            finally
            {
                pmo.Options          = options;
                base.unsafe_compCode = pCompCode;
                base.unsafe_reason   = pReason;
                base.TrExit(method);
            }
        }
Exemplo n.º 3
0
        protected void Put(MQMessage message, MQPutMessageOptions pmo, int spiOptions)
        {
            uint method = 0x227;

            this.TrEntry(method, new object[] { message, pmo, spiOptions });
            int  options = 0;
            bool flag    = false;

            byte[] src      = null;
            int    compCode = 0;
            int    reason   = 0;

            try
            {
                MQSPIPutOpts spipo = null;
                if (message == null)
                {
                    base.throwNewMQException(2, 0x7ea);
                }
                if (pmo == null)
                {
                    base.throwNewMQException(2, 0x87d);
                }
                spipo   = new MQSPIPutOpts(spiOptions);
                options = pmo.Options;
                flag    = true;
                if ((pmo.Options & 6) == 0)
                {
                    pmo.Options |= 4;
                }
                src = message.GetBuffer();
                base.tempMsgBuffer = new byte[src.Length];
                Buffer.BlockCopy(src, 0, base.tempMsgBuffer, 0, src.Length);
                int    characterSet = message.CharacterSet;
                int    encoding     = message.Encoding;
                string format       = message.Format;
                base.PerformMsgProcessgingBeforePut(ref message);
                src = message.GetBuffer();
                ((NmqiSP)base.qMgr.nmqiConnector).SPIPut(base.qMgr.hConn, base.objectHandle.HOBJ, ref message.md, ref pmo, ref spipo, src.Length, src, out compCode, out reason);
                if (compCode == 0)
                {
                    base.PerformMsgProcessingAfterPut(ref message, base.tempMsgBuffer, characterSet, encoding, format);
                }
                if (compCode != 0)
                {
                    base.qMgr.CheckHConnHealth(reason);
                    base.throwNewMQException(compCode, reason);
                }
            }
            catch (MQException exception)
            {
                compCode = exception.CompCode;
                reason   = exception.Reason;
                throw exception;
            }
            finally
            {
                if (flag)
                {
                    pmo.Options = options;
                }
                base.unsafe_compCode = compCode;
                base.unsafe_reason   = reason;
                base.TrExit(method);
            }
        }