How do I set the MSMQ Message Extension Using BizTalk's MSMQ Adapter?

旧时模样 提交于 2019-12-05 07:53:38

Did you see this article? http://msdn.microsoft.com/en-us/library/aa560725.aspx

The article shows how to programmatically set an MSMQ receive location; additionally, it exposes access to secondary properties that might be necessary but not shown by the default BizTalk adapter - (e.g. Extension) .

ManagementClass objReceiveLocationClass =
    new ManagementClass(
                    "root\\MicrosoftBizTalkServer",
                    "MSBTS_ReceiveLocation",
                    null);
// Create an instance of the member of the class
ManagementObject objReceiveLocation =
            objReceiveLocationClass.CreateInstance();

// Fill in the properties
objReceiveLocation["Name"] = name;
objReceiveLocation["ReceivePortName"] = port;
objReceiveLocation["AdapterName"] = adapterName;
objReceiveLocation["HostName"] = hostName;
objReceiveLocation["PipelineName"] = pipeline;
objReceiveLocation["CustomCfg"] = customCfg;
objReceiveLocation["IsDisabled"] = true;
objReceiveLocation["InBoundTransportURL"] = inboundTransport;

// Put the options -- creates the receive location
objReceiveLocation.Put(options);

EDIT:

After decompiling the BizTalk MSMQ adapter code down to the interface level, I don't see a way of doing this using the default adapter. The adapter can't be extended either as it is sealed.

The only other options I've found are

  1. Create a custom adapter (as you have already listed)
  2. hack 1: Place the data in a property that IS accessible by the MSMQ Adapter (e.g. Label), intercept the message with an external process, transform it there.
  3. hack 2: Use a custom adapter that is already written to call a powershell script and do the necessary transformation/transmission in that script. http://social.technet.microsoft.com/wiki/contents/articles/12824.biztalk-server-list-of-custom-adapters.aspx#BizTalk_PowerShell_Adapter
  4. hack 3: Redefine the requirements. E.g. get the receiver to change the required field from Extension to something that is available (e.g. Label).
  5. hack 4: Attempt to find a way to send the message via the WCF-MSMQ adapter. http://msdn.microsoft.com/en-us/library/system.servicemodel.netmsmqbinding.aspx

EDIT: (The reason why you SHOULDN'T set the extension property)

The Extension property is used to link large messages together which get fragmented in transport if the total message size is over 4MB. This is done under the covers and if circumvented can cause the corruption of large messages.

To participate in large message exchanges, the message queuing computer must have the Mqrtlarge.dll file installed, and the message queuing application should use the add-on APIs. Otherwise, complete messages will be fragmented.

BizTalk 2004 Large Message Extension Documentation

BizTalk 2010 Large Message Extension Documentation

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!