Microsoft KB Archive/320726

= Implement Custom Post-Processor to Add Header Properties in AIC =

Article ID: 320726

Article Last Modified on 11/15/2007

-

APPLIES TO


 * Microsoft BizTalk Adapter for MQSeries

-



This article was previously published under Q320726



SYMPTOMS
On many occasions, you may want to set the MQSeries header properties of a message that flows from BizTalk to MQSeries because it permits back end systems to carry out various operations such as identifying and correlating the message with the MsgID and CorrelID based on header properties. However, there is no way in BizTalk Adapter for MQSeries for you to add these header properties.



RESOLUTION
A supported hotfix is now available from Microsoft. However, this hotfix is intended to correct only the problem that is described in this article. Apply this hotfix only to systems that are experiencing this specific problem. This hotfix might receive additional testing. Therefore, if you are not severely affected by this problem, we recommend that you wait for the next service pack that contains this hotfix.

To resolve this problem, submit a request to Microsoft Online Customer Services to obtain the hotfix. To submit an online request to obtain the hotfix, visit the following Microsoft Web site:

http://go.microsoft.com/?linkid=6294451

Note If additional issues occur or any troubleshooting is required, you might have to create a separate service request. The usual support costs will apply to additional support questions and issues that do not qualify for this specific hotfix. To create a separate service request, visit the following Microsoft Web site:

http://support.microsoft.com/contactus/?ws=support

The English version of this fix has the file attributes (or later) that are listed in the following table. The dates and times for these files are listed in coordinated universal time (UTC). When you view the file information, it is converted to local time. To find the difference between UTC and local time, use the Time Zone tab in the Date and Time tool in Control Panel.   Date         Time   Version      Size   File name ---  20-Jun-2002  17:29  1.0.45.3   33,280   Mtbsvc.exe 20-Jun-2002 17:29  1.0.45.3   27,136   Aicmq.dll 20-Jun-2002 17:29  1.6.1.1    51,200   LKRHAsh.dll 20-Jun-2002 17:29  1.0.45.3  171,520   Mmcmqs.dll 20-Jun-2002 17:29  1.0.45.3   27,648   Mqadaptersetup.dll 20-Jun-2002 17:29  1.0.45.3   54,784   Mqhelper.dll 20-Jun-2002 17:29  1.0.45.3    7,680   Mqhelperps.dll 20-Jun-2002 17:29  1.0.45.3   36,352   Mtbworker.dll 20-Jun-2002 17:29  1.0.45.3   20,480   Svcevent.dll 21-Jun-2002 13:01            136,974   Mmcmqs.chm 14-Jun-2002 14:27              1,294   Aicmq_mqpipeline_1.asp 14-Jun-2002 14:27              1,248   Aicmq_mqpipeline_1_post.asp

Installation Instructions

NOTE: The fix must be applied on an RTM installation. It is a cumulative package and includes the fixes that are described in the following Microsoft Knowledge Base articles:

316405 FIX: You Cannot Send Messages from MQSeries to BizTalk on the Chinese Version of a Windows 2000-Based System

320738 FIX: BizTalk Adapter for MQSeries Service Requires an Administrator Account


 * 1) Stop the BizTalk Adapter for MQSeries service.
 * 2) In Component Services, remove the MQHelper COM component from the BizTalk Adapter for MQSeries COM+ application.
 * 3) Install the Btsmqs_q320726.exe fix. The server is asked to restart.
 * 4) Add MQHelper COM+ components to the BizTalk Adapter for MQSeries COM+ application by using the new binary (C:\Program Files\Microsoft BizTalk Adapter for MQSeries\Mqhelper.dll).
 * 5) Replace the RTM Active Server Pages (ASP) pages that are installed under the BizTalk folder (C:\Program Files\Microsoft BizTalk Server\MessagingManager\pipeline) with the ASP pages that are in the attached .zip file (Aicmq_mqpipeline_1.asp and Aicmq_mqpipeline_1_post.asp).
 * 6) Use the header file (Bts_mqs_sdk_guids.h) in the .zip file to create your post-processor component.

Notes:
 * Make sure that you use importlib to import Pipecomp.tlb in your Interface Definition Language (IDL) files. Importing Pipecomp.idl directly may cause the IPipelineComponent interface to be defined and registered again. In the updated documentation, see the sample code for a sample post-processor component.
 * After the post-processor component is loaded in the BizTalk process (Mscis.exe), to replace it, you must stop BizTalk Messaging service. Microsoft recommends that you implement the post-processor component as an out-of-process component. In this case, it is hosted in its own process space. If it is implemented as in-process, it can still be configured in a COM+ application so that it is run under a different DLL host. If you do this, you do not have to restart the service to replace the post-processor each time. Only the DLL host that is loaded as the post-processor component must be unloaded. This is not an issue at run time. It is only an issue during development.



STATUS
Microsoft has confirmed that this is a problem in the Microsoft products that are listed at the beginning of this article.



MORE INFORMATION
After you apply this fix, you can register one or more post-processor components with the BizTalk Adapter for MQSeries Application Integration Component (AIC). The post-processor component can set the supported MQSeries header properties. The AIC adds these header properties to the message before sending it to MQSeries, allowing back end systems to carry out various operations such as identifying and correlating the message with the MsgID and CorrelID, setting the expiration time, generating reports, and setting the replytoqueue name.

After you have implemented the custom post-processor, the message is dispatched to an AIC instance, which is configured with a particular post-processor. The AIC then passes the message payload to the post-processor through the IPipelineComponent:Execute interface. The post-processor then parses the payload for the appropriate property (for example, useridentifier), and populates an IDictionary object with the appropriate name/value pairs, which are returned to the AIC. Finally, the AIC uses the IDictionary object to set the appropriate MQSeries header property.

