ASG
IBM
Zystems
Cressida
Icon
Netflexity
 
  MQSeries.net
Search  Search       Tech Exchange      Education      Certifications      Library      Info Center      SupportPacs      LinkedIn  Search  Search                                                                   FAQ  FAQ   Usergroups  Usergroups
 
Register  ::  Log in Log in to check your private messages
 
RSS Feed - WebSphere MQ Support RSS Feed - Message Broker Support

MQSeries.net Forum IndexIBM MQ API SupportAnother MQRC_ENLISTMENT_ERROR in .NET

Post new topicReply to topic
Another MQRC_ENLISTMENT_ERROR in .NET View previous topic :: View next topic
Author Message
Henk-Jan Visscher
PostPosted: Fri Nov 12, 2004 10:05 am Post subject: Another MQRC_ENLISTMENT_ERROR in .NET Reply with quote

Novice

Joined: 12 Nov 2004
Posts: 10
Location: Amsterdam

I'm developing a server program which should process incoming messages in a transaction. On my Windows XP client everything works fine. However, as soon as I move the program to a windows 2003 server, the program crashes with a "MQRC_ENLISTMENT_ERROR" error. No matter wich options I change in the DTC, nothing works.

I created a very small program with the minimum code to send a message in a transaction:

Code:

using System;
using System.EnterpriseServices;
using IBM.WMQ;

namespace MQDTC
{
   [Transaction]
   public class MQDTCTest : ServicedComponent
   {
      [AutoComplete]
      private void PostOneMessage(string qmn, string qn, string m) {
         MQQueue q = new MQQueueManager(qmn).AccessQueue(qn, MQC.MQOO_OUTPUT);
         MQPutMessageOptions mpo = new MQPutMessageOptions();
         mpo.Options = MQC.MQPMO_SYNCPOINT;
         MQMessage message = new MQMessage();
         message.Format = MQC.MQFMT_STRING;
         message.WriteString(m);
         q.Put(message, mpo);
         q.Close();
      }

      [STAThread]
      static void Main(string[] args)
      {
         if (args.Length == 3) {
            try {
               new MQDTCTest().PostOneMessage(args[0], args[1], args[2]);
            } catch (MQException mqe) {
               Console.WriteLine("MQException thrown: " + mqe.Message);
               Console.WriteLine("  Completion code: " + mqe.CompletionCode);
               Console.WriteLine("  Reason(code): " + mqe.Reason + "(" + mqe.ReasonCode + ")");
               Console.WriteLine("  Source: " + mqe.Source);
               Console.WriteLine("  Inner Exception: " + mqe.InnerException.Message);
            }
         } else {
            Console.WriteLine("Usage: MQDTCTest.exe <queue manager> <queue name> <word>");
         }
      }
   }
}


The program gives the following output:

Code:

C:\> MQDTCTest QM_Bello postcard hi!

MQException thrown: MQRC_UOW_ENLISTMENT_ERROR
  Completion code: 2
  Reason(code): 2354(2354)
  Source: mscorlib

Server stack trace:
   at IBM.WMQ.MQQueue.Put(MQMessage message, MQPutMessageOptions pmo)
   at MQDTC.MQDTCTest.PostOneMessage(String qmn, String qn, String m)
   at System.Runtime.Remoting.Messaging.Message.Dispatch(Object target, Boolean fExecuteInContext)
   at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)

Exception rethrown at [0]:
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at MQDTC.MQDTCTest.PostOneMessage(String qmn, String qn, String m)
   at MQDTC.MQDTCTest.Main(String[] args)


Does anyone have any idea how I can make this work?

Thanks in advance,
Henk-Jan.
Back to top
View user's profile Send private message
kirani
PostPosted: Fri Nov 12, 2004 10:52 am Post subject: Reply with quote

Jedi Knight

Joined: 05 Sep 2001
Posts: 3779
Location: Torrance, CA, USA

From WMQ manual ..
Quote:

2354: MQRC_UOW_ENLISTMENT_ERROR
This reason code can occur for a variety of reasons. The most likely reason is that an object created by a DTC transaction does not issue a transactional MQI call until after the DTC transaction has timed out. (If the DTC transaction times out after a transactional MQI call has been issued, reason code MQRC_HANDLE_IN_USE_FOR_UOW is returned by the failing MQI call.)
Another cause of MQRC_UOW_ENLISTMENT_ERROR is incorrect installation; Windows NT Service pack must be installed after the Windows NT Option pack.
This reason code occurs only on Windows.
Corrective action: Check the DTC “Transaction timeout” value. If necessary, verify the NT installation order.

_________________
Kiran


IBM Cert. Solution Designer & System Administrator - WBIMB V5
IBM Cert. Solutions Expert - WMQI
IBM Cert. Specialist - WMQI, MQSeries
IBM Cert. Developer - MQSeries

Back to top
View user's profile Send private message Visit poster's website
Henk-Jan Visscher
PostPosted: Fri Nov 12, 2004 11:53 am Post subject: Reply with quote

Novice

Joined: 12 Nov 2004
Posts: 10
Location: Amsterdam

Kiran, thanks for the very fast response.

But alas it didn't really help. As I'm not using Windows NT I assume it should be the first reason.

I have no idea why my object does not issue a transactional MQI call in time.

To be honest, I have no idea what transactional MQI call is and how I should issue it.

I just used the information from the "WebSphere MQ Solutions in a Microsoft .NET Environment" Redbook, they don't mention transactional MQI calls.

Is this someway I can fix in my example program? If so, how?

Another remark: when I run the AMQTSIVT.exe test program, the following errors are listed in the logfile:

Code:

20:47:35 Install IVT MTS Component, OK
20:47:35 Set transactionality to REQUIRED, Error 0x80070057"The parameter is incorrect.
"
20:47:36 Starting Balance is 0.000000
20:47:36 Incrementing Account Test MQSeries Only - COMPLETEFailed: Not in transaction, Error 0x80004005"Unspecified error
"
20:47:36 End Balance is 0.00, (MQ = 0.00), FAILED
 -> DBUpdated: No; MQUpdated No
20:47:36 Starting Balance is 0.000000
20:47:36 Incrementing Account Test MQSeries Only - ABORTFailed: Not in transaction, Error 0x80004005"Unspecified error
"
20:47:36 End Balance is 0.00, (MQ = 0.00), PASSED
20:48:53 Cleaning Up...
20:48:53 Deleting MTS Package


So, if anyone has any suggestion, I would be very grateful.

Greetings,
Henk-Jan.

BTW: mqe.StackTrace should have been of mqe.InnerException in the example given above.
Back to top
View user's profile Send private message
fjb_saper
PostPosted: Fri Nov 12, 2004 2:30 pm Post subject: Reply with quote

Grand High Poobah

Joined: 18 Nov 2003
Posts: 20756
Location: LI,NY

Could it be that you are binding with a version of the dll that does not support 2 phase commit ?

Remember late binding in C#...

Hope it helps
Back to top
View user's profile Send private message Send e-mail
Henk-Jan Visscher
PostPosted: Fri Nov 12, 2004 2:34 pm Post subject: Reply with quote

Novice

Joined: 12 Nov 2004
Posts: 10
Location: Amsterdam

FJB,

Is there any way I can find out?

Is this consistent with the fact that it runs smoothly under XP but not under Windows 2003 Server?

Greetings,
Henk-Jan.
Back to top
View user's profile Send private message
fjb_saper
PostPosted: Fri Nov 12, 2004 2:38 pm Post subject: Reply with quote

Grand High Poobah

Joined: 18 Nov 2003
Posts: 20756
Location: LI,NY

You have to remember that there are a few flavors to MQ.

a) MQ Server with the dlls for 2 phase commit
b) MQ client no 2 phase commit
c) MQ Transactional client with 2 phase commit (extra license needed)

Now as to which is the right dll to use in your build ... read the .Net documentation...

Hope it helps
Back to top
View user's profile Send private message Send e-mail
Henk-Jan Visscher
PostPosted: Fri Nov 12, 2004 2:49 pm Post subject: Reply with quote

Novice

Joined: 12 Nov 2004
Posts: 10
Location: Amsterdam

FJB,

Thanks, I will (first thing when I'm back in the office again). Although I'm only linking against (something like) amqmdnet.dll, I assume the installation will determine which version of websphere will be used.

Henk-Jan.
Back to top
View user's profile Send private message
JasonE
PostPosted: Sun Nov 14, 2004 2:00 pm Post subject: Reply with quote

Grand Master

Joined: 03 Nov 2003
Posts: 1220
Location: Hursley

The amqtsivt is broken on win2003 due to o/s 'changes' which break backward compatibility. It isnt related to your current problem (I think...)
Back to top
View user's profile Send private message
Henk-Jan Visscher
PostPosted: Sun Nov 14, 2004 2:18 pm Post subject: Reply with quote

Novice

Joined: 12 Nov 2004
Posts: 10
Location: Amsterdam

Too bad, otherwise I could just concentrate on fixing the amqtsivt program, now I stil have to get my own program running.

Could it have something to do with permissions? My network adminstrator refuses to set up an account in my test environment which can access AD, but as it seems to run fine on Windows XP I assume this ain't the problem.

However, I noticed that the Distibuted Transaction Coordinator service on my Windows XP machine logs on as local administrator, on Windows 2003 it logs on as NT AUTHORITY\NetworkService. Could this have anything to do with the MQRC_UOW_ENLISTMENT_ERROR error?

Greetings,
Henk-Jan.
Back to top
View user's profile Send private message
JasonE
PostPosted: Mon Nov 15, 2004 7:51 am Post subject: Reply with quote

Grand Master

Joined: 03 Nov 2003
Posts: 1220
Location: Hursley

I really dont know, sorry. I do know that MQ cant handle the network service userid BUT you should see different errors to what you are getting. It would be a case of cutting it down to a simple test program and if it still fails work through a trace - your best bet is to report it through IBM service (Sorry - I dont have time at the moment to look through it as its quite a complex area).
Back to top
View user's profile Send private message
Henk-Jan Visscher
PostPosted: Thu Nov 18, 2004 5:24 am Post subject: Solution Reply with quote

Novice

Joined: 12 Nov 2004
Posts: 10
Location: Amsterdam

We finally we found the solution to this problem. It is a known problem listed at the IBM website and has to do with third-party XA DLLs in the MS DTC process. (I still don't understand why this page doesn't show up in search engines).

It can be solved by adding the following key to the registry.

Code:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\XADLL
amqmtsxatm.dll = C:\Program Files\IBM\MQSeries\bin\amqmtsxatm.dll


For more information see:

http://www-1.ibm.com/support/docview.wss?rs=171&context=SSFKSJ&q1=XA+DTC&uid=swg21159392&loc=en_US&cs=utf-8?=en

Greetings and thanks for all the help,
Henk-Jan.
Back to top
View user's profile Send private message
JasonE
PostPosted: Thu Nov 18, 2004 6:40 am Post subject: Reply with quote

Grand Master

Joined: 03 Nov 2003
Posts: 1220
Location: Hursley

Wow thanks - I had never heard of that! Thanks for posting the solution
Back to top
View user's profile Send private message
jefflowrey
PostPosted: Thu Nov 18, 2004 7:07 am Post subject: Reply with quote

Grand Poobah

Joined: 16 Oct 2002
Posts: 19981

You know, it sure would be nice if that IBM support note clearly indicated that you need to adjust the path in that Registry Entry to point to your install directory.
_________________
I am *not* the model of the modern major general.
Back to top
View user's profile Send private message
Henk-Jan Visscher
PostPosted: Thu Nov 18, 2004 7:17 am Post subject: Reply with quote

Novice

Joined: 12 Nov 2004
Posts: 10
Location: Amsterdam

Yep, you're right (of course our installation differed from the default location). But it would be even nicer if IBM would let search engines index their support pages, would have saved me a couple of days.
Back to top
View user's profile Send private message
JasonE
PostPosted: Thu Nov 18, 2004 7:27 am Post subject: Reply with quote

Grand Master

Joined: 03 Nov 2003
Posts: 1220
Location: Hursley

Dont quote me, but I heard rumours that is being organized...
Back to top
View user's profile Send private message
Display posts from previous:
Post new topicReply to topic Page 1 of 1

MQSeries.net Forum IndexIBM MQ API SupportAnother MQRC_ENLISTMENT_ERROR in .NET
Jump to:



You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Protected by Anti-Spam ACP


Theme by Dustin Baccetti
Powered by phpBB 2001, 2002 phpBB Group

Copyright MQSeries.net. All rights reserved.