2011-03-10 7 views
1

최근에 구현하기가 쉽지 않은 문제가 발생했습니다. COM 개체가 이미 Windows 7 컴퓨터에 설치되어 있습니다. 이 COM 개체 주위에 webservice 또는 WCF 서비스를 작성하려고합니다. 불행히도, 내가 뭘하려고해도 아무 쓸모가없는 것 같습니다.Interop : ASMX 웹 서비스 또는 WCF 서비스에서 COM 사용 - C#

Visual Studio 2008과 2010이 모두 설치되어 있습니다. VS IDE를 사용하여 COM에 대한 참조를 만들었으며 예상대로 VS는 자동으로 COM 멤버에 액세스하는 데 필요한 interop DLL을 만들었습니다.

winforms 응용 프로그램에서 이것을 시도하면 모든 것이 잘 작동하지만 서비스에서 사용하면 운이 없어진 것입니다.

코드는 supersimple이며 다음과 같습니다

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 런타임에 종속됩니다. 내 system32 및 webservice에 대한 bin 폴더의 PB 런타임을 복사했습니다.

필자는 종속성 문제가 아니라 관리되지 않는 코드를 호출하는 보안 문제라고 생각합니다.

또한 앱 풀을 사용하고 실행을 위해 관리자 계정을 사용하여보다 proviled 된 계정에서 웹 서비스를 실행 해 보았습니다. 같은 문제.

아이디어가 있으십니까? 감사합니다. .

+0

IIS가 서로 다른 보안 설정의 전체 스택을 가지고 - 그것은 적극적으로로드에서 COM 바이너리 차단 될 수 있습니다 작업자 프로세스. 어쩌면 http://serverfault.com/을 시도해보십시오. –

답변

0

Windows 응용 프로그램에서는 로그인 한 사용자의 보안 컨텍스트에 있습니다.

이 서비스에서 기본값은 응용 프로그램 풀 ID의 보안 컨텍스트에서 실행중인 것입니다. 아마도 COM을 호출 할 수없는 NETWORK SERVICE 사용자 일 것입니다.

+0

Shiraz, 컨텍스트가 무엇인지는 알고 있지만 관리자와 같은 서비스 프로세스에 다른 사용자를 지정하여 컨텍스트를 변경하려고했습니다. 또한 taskmanager의 프로세스가 Administrator 계정으로 실행되는 것을 보았습니다. 여전히 같은 오류가 ... – Adi

관련 문제