[Stackoverflow] [Progress OpenEdge ABL] COM-Registered .NET Class Intermittently Reported as not Registered Properly

Status
Not open for further replies.
A

Aaron M. Eshbach

Guest
We have a legacy OpenEdge 10.1C application that needs to call a WCF netTcp service. Since the only means of interoperability available in OpenEdge 10.1C is COM, I created a client that wraps the use of a ChannelFactory to create a WCF service client, and then allows the OpenEdge application to make multiple calls to the service using the same instance of the COM object.

This worked fine throughout all of our development and testing cycles, but in our Production environment, we see the following error about 1.4% of the time

The automation server for The.COM.WCF.Client is not registered properly.
Please reinstall this server or try registering it again. (5893)


This error is occurring on an OpenEdge AppServer worker process, and once that worker encounters the error, it gets the error every time it tries to use that COM object. However, if the worker process is trimmed (terminated) and a new process starts up on the same server, it will very likely work fine.

Has anyone experienced intermittent errors with COM objects like this? The .NET class was registered with regasm and the class has the following attributes:

[<Guid("c7e8dd5a-bc01-4a45-85a2-6aa7f9535b47")>]
[<ClassInterface(ClassInterfaceType.None)>]
[<ComSourceInterfaces(typeof<IWcfClient>)>]


The OpenEdge class that's using the client looks something like this (I'm no OpenEdge expert, but it seems ok to me):

USING Progress.Lang.*.

CLASS WcfClient:

DEFINE PUBLIC PROPERTY ClientObject AS COM-HANDLE NO-UNDO
GET.
PRIVATE SET.

CONSTRUCTOR PUBLIC WcfClient (INPUT ipcConnectionString AS CHARACTER):
IF ipcConnectionString > "" THEN
DO:
CREATE VALUE("The.COM.WCF.Client") ClientObject.
ClientObject:Init(ipcConnectionString).
END.
END CONSTRUCTOR.

DESTRUCTOR PUBLIC WcfClient():
NO-RETURN-VALUE ClientObject:Close() NO-ERROR.
RELEASE OBJECT ClientObject NO-ERROR.
ASSIGN ClientObject = ?.
END DESTRUCTOR.

END CLASS.


I haven't been able to reproduce the behavior in a non-production environment, even with hundreds of thousands of messages, so I suspect it is more related to the registration or the operating system configuration than the code, but I welcome any suggestions on how to troubleshoot this error.

Continue reading...
 
Status
Not open for further replies.
Top