|
Home > Archive > BizTalk Server Framework > May 2004 > Application Integration Component fails
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
Application Integration Component fails
|
|
|
| I have an AIC utilized by a message port that
periodically logs this error
A condition has occurred that indicates this COM+
application is in an unstable state or is not functioning
correctly. Assertion Failure: !
m_fActivated
Server Application ID: {5A897BF7-596A-4379-A6CD-
67E541A7B1D3}
Server Application Instance ID:
{790E2774-2F98-4F29-86E3-0BFB5EE51BB4}
Server Application Name: HL7_Messaging_AICs
The serious nature of this error has caused the process
to terminate.
COM+ Services Internals Information:
File: d:\srv03rtm\com\complus\src\comsvcs\jit\
jit.cpp,
Line: 92
Comsvcs.dll file version: ENU 2001.12.4720.0 shp
Has anyone had problems with Biztalk instantiating a
component and getting errors such as this?
Thanks,
Sean
| |
|
| I had the same problem, and have been trying to sort it out for the last week. I is very maddening, because there is virtually nothing online for the problem. I did find a solution, that is as follows.
This is in IIS 6.0 / 2003. The problem never occured with IIS 5.0 / 2000.
My web apps (in both ASP or ASP.Net) are consuming .Net derived Enterprise Services. The problem you described occured when then Enterprise Service is not destroyed properly.
The simply solution is that obj.Destroy() must be called for each Enterprise Service. The Destroy method is part of the Enterprise Service class, and is accessed via the IUnknown interface. You must shadow the method, to be able to add it to the interface
defined for your own class. The Enterprise Service base class will not allow it to be overidden.
This is simple enough. But there was a futher complication with what I was doing. My web app would call --> Enterprise Service 1 which would then call --> Enterprise Service 2. Enterprise Service 2 runs as a statefull object. (It contained cached XSLT's.)
To dispose of the COM+ applicatons in the proper order, I had to add a Close method to each Enterprise Service as well as expose the Dispose method within the classes interface. The Close method would dispose of any other Enterprise Services held by that
object. The Destroy method destroys the Enterprise Service for the object.
The destruction sequence must go:
a) Web app calls Close for ES1
b) ES1's Close method calls Close and Destroy for ES2.
c) Web app calls Destroy for ES1.
If you call Destroy from the Close method, you end up with intermitent COM+ Application crashes. The Enterprise Service Destroy method cannot be called internally. It must be called by the client.
To add confussion to the whole business, not destroying ES2 correctly will result in ES1 failing on a subsequent page request followed by other unrelated Enterprise Services calls made by the web app on later page requests. (Up to five minutes later!) The
lengthy time lapse between failures can make the events appear disconnected. However, they will all trace back to (a single instance) of improper object destruction.
----------------------------------------------
sent via http://www.biztalkug.com
all about BizTalk
|
|
|
|
|