Friday, May 2, 2014

BizTalk MQSeries Adapter COM+ Error 80004005

When connecting BizTalk to Websphere MQ, you can choose between two options:

-       MQSC adapter (Client based)
-       MQSeries (Server based)

My current client chose to use the MQSeries adapter to connect to Websphere MQ. The core of this adapter is a COM+ component running on the BizTalk server which will handle all processing.

Issue

Normally, all processing runs smoothly. But sometimes, when executing a new installation of an application on BizTalk, we started receiving the following error-message:

“Retrieving the COM class factory for remote component with CLSID {} from machine xx failed due to the following error: 80004005”

Also, we noticed that all messages that were sent to the MQSeries adapter, were staying in status Started with the same error. All processing was gone and nothing was going to or coming from MQ.




When first checking the running component, we didn’t see anything weird. Everything was running fine. We looked into the issue for quite some hours but didn’t find anything that was causing the problems.

Solution

The problem itself lays in the fact that the COM+ component can recycle itself but that the recycle doesn’t work properly. So we don’t see any “extra” failing instances of the component but things change when we boot up the process explorer:




We see two instances of the component! We can tell this for sure since the MQSAgent2 is the only thing running under this specific account (check the properties of a process – right click – properties). So there is an instance running correctly, but an old one, which isn’t visible in the running, processes on the Component Services, but still present in the windows processes. This faulty component is still taking in all the incoming requests.

Only thing to figure out now is the process id of the component that is currently running. This process id is visible in the components mmc.


It’s now just a matter of killing the other component to resolve the issue.

Extra

The other measure we took to avoid extra downtime of the environment was raising the pool size of the component. This means that when a component starts to recycle another component is started which will automatically take in all the new requests while the other is still recycling. This can be set in the properties of the component.

Any questions can be put in the comments, or you can contact me through twitter directly.

Andrew De Bruyne (Twitter: @draitnn)

1 comment:

  1. HI, we have the same issue here. Did you ever resolve the root cause (the dllhost.exe process not recycling properly)?
    Regards
    Antonie Merks

    ReplyDelete