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.
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