Search code examples
wcfweb-servicesiiscomcom-interop

Interop: Using COM in ASMX webservice or WCF service - C#


Recently, I am facing an issue I thought it would be easy to implement. I have a COM object already installed on my Windows 7 machine. I am trying to build a webservice or WCF service around this COM object. Unfortunately, no matter what I try seems useless.

I have both Visual Studio 2008 and 2010 installed. Using the VS IDE, I created a reference to the COM and as expected, VS automagically created the interop DLL needed to access the members of COM.

When I try this in a winforms application, everything works fine, but when used in a service my luck is gone.

The code is supersimple and it looks like this:

LCDirect_WebLogin.CoClass_n_ap_com com = (LCDirect_WebLogin.CoClass_n_ap_com)obj.Unwrap();
object value = null;
string name = "";
com.getsysteminfo(name, ref value);
if (value != null)
    return value.ToString();

So, the same code in winform app works fine but under IIS it crashes.

A few extra info: Finally I need to deploy on a Windows 2003 Server. The COM DLL depends on PowerBuilder runtime. I copied the PB runtimes in my system32 and also in bin folder for webservice.

I don't think it's a dependency issue, but rather a security issue with calling unmanaged code.

I also tried running the webservice under a more proviledged account using the App Pool and using an administrator account to run under. Same issue.

Any ideas? Thanks.


Solution

  • Finally I solved my problem. The solution is to run your COM object in STA mode. I found the solution here: http://www.techrepublic.com/article/application-development-calling-a-com-object-from-a-web-service-in-net/5152421