I have spent a couple of days doing some proof of concepts with the MQSeries Adapter, and I have found some issues which took me some time solving.

  • Access Denied. I had this error message while setting the configuration data for the Queue Definition, when trying to open the Queue Manager Combo. Obviously is a permissions problem, you have to add your account to the role created in the MQSAgent COM+ Application on the MQSeries Server. If you forget to add also the BizTalk account the error is much more descriptive: "The adapter has encountered an 'Access Denied' error while attempting to contact the COM+ object on the MQSeries server. Ensure the BizTalk account is added to the Role on the MQSAgent COM+ application."
  • UPDATE: Lately I have found an error code 2018, which is caused because the Identity of the MQSAgent COM+ Application isn't in the 'mqm' windows group.
  • Once everything developed and deployed I had a "Error encountered on opening Queue Manager name = QMSVMLT0 Reason code = 2195.". The origin for that is the MSDTC. Common configuration since the SP2, you need to enable the Network DTC Access, Allow Outbound  and Allow Network Clients & Outbound for the client and the server respectively.
     
  • CorrelId. I was trying a request-reply scenario, but generating the Correlation Id in BizTalk instead of MQ. The SDK sample uses a constant which is not a commonly valid scenario, I would prefer something like the InterchangeID. The key was that MQ needs a 48 characters Id, and some characters like '-' are deleted. This code with a correlation set on the MQSeries.MQMD_CorrelId worked:

    MyGuid = new System.Guid(RequestMessage(BTS.InterchangeID));
    CorrelationValue = MyGuid.ToString("N") + "0000000000000000"; // 32 + 16 = 48 characters
    MQRequestMessage(MQSeries.MQMD_MsgId) = CorrelationValue;
    MQRequestMessage (MQSeries.MQMD_CorrelId) = CorrelationValue;