Взаимодействие: использование COM в веб-службе ASMX или службе WCF - C # - PullRequest
1 голос
/ 10 марта 2011

Недавно я столкнулся с проблемой, которую, как мне казалось, легко реализовать.На моем компьютере с Windows 7 уже установлен COM-объект.Я пытаюсь построить веб-сервис или сервис WCF вокруг этого COM-объекта.К сожалению, что бы я ни пробовал, это кажется бесполезным.

У меня установлены Visual Studio 2008 и 2010.Используя VS IDE, я создал ссылку на COM и, как и ожидалось, VS автоматически создал библиотеку взаимодействия, необходимую для доступа к членам COM.

Когда я пытаюсь сделать это в приложении winforms, все работает нормально, нопри использовании в сервисе моя удача исчезла.

Код очень прост и выглядит так:

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();

Итак, тот же код в приложении winform работает нормально, но под IIS вылетает.

Несколько дополнительных сведений: Наконец, мне нужно развернуть на Windows 2003 Server.COM DLL зависит от времени выполнения PowerBuilder.Я скопировал среды выполнения PB в мою system32, а также в папку bin для веб-службы.

Не думаю, что это проблема зависимости, а скорее проблема безопасности с вызовом неуправляемого кода.

Я такжепопытался запустить веб-сервис под более защищенной учетной записью, используя пул приложений и используя учетную запись администратора для запуска.Та же проблема.

Есть идеи?Благодаря.

Ответы [ 3 ]

4 голосов
/ 10 марта 2011

Наконец я решил свою проблему. Решение состоит в том, чтобы запустить ваш COM-объект в режиме STA. Я нашел решение здесь: http://www.techrepublic.com/article/application-development-calling-a-com-object-from-a-web-service-in-net/5152421

0 голосов
/ 31 марта 2011

Для тех, кого может заинтересовать другое элегантное решение: http://msdn.microsoft.com/en-us/magazine/cc163544.aspx

0 голосов
/ 10 марта 2011

В вашем приложении Windows вы находитесь в контексте безопасности вошедшего в систему пользователя, вы.

В службе по умолчанию выполняется то, что вы выполняете в контексте безопасности удостоверения пула приложений.Возможно, пользователь NETWORK SERVICE, которому запрещено звонить в COM.

...