Microsoft MVP성태의 닷넷 이야기
웹에서 COM Exception.. [링크 복사], [링크+제목 복사],
조회: 11225
글쓴 사람
임동찬 (dngchn.im at samsung.com)
홈페이지
첨부 파일
 

우선 제가 겪고 있는 증상은 다음 링크의 첫번째 문제와 동일합니다.
http://connect.microsoft.com/VisualStudio/feedback/details/507848/assembly-of-32-bit-not-work-on-web-application

문제는, 64bit OS에서 ASP.NET 웹 애플리케이션에서 서버의 COM 개체 기능을 이용하려고 하는 부분에서
"Retrieving the COM class factory for component ...." (상세메세지는 위 링크의 것과 CLSID만 다름) 와 같은 exception이 발생합니다.

그러나 이상(?)한건 위 웹 애플리케이션을 VS2010에서 디버그 모드로 실행하면 잘 됩니다. IIS에 배포하여 접속할때만 위 문제가 발생합니다.
더욱 이상한건 동일한 기능을 64bit OS에서 웹 애플리케이션이 아닌 윈도우즈 애플리케이션으로 만들어 테스트해보면 잘 동작합니다.
몇일을 구글링하다 찾은 링크가 위에 링크인데, MS의 공식 답변을 아무리 읽어봐도 정확히 이해가 되질 않네요.
링크의 답변대로(제가 이해한대로) 64bit OS에서 32bit COM을 불러쓰면서 발생한 문제이고, 해결하려면,
COM 제작사에 64bit로 컴파일된 버전을 요청해라, 그리고 VS2010의 디버그모드로 실행시키면 해당 문제가 발생하지 않는다(이부분이 왜 그런지 MS 답변을 봐도 정확히 이해되질 않네요.)
MS 답변에 대해 확인 차 32bit OS에서 동일한 웹 애플리케이션 테스트해보니 문제 없이 잘 동작합니다.
(물론 동일한 기능의 윈도우즈 애플리케이션도 잘 동작 하구요).

위 링크 질문자처럼 저또한 COM 제작사에 64bit을 요구하기 어려운 상황이구요.
위 답변이 2009년 것이라 그 이후 뭔가 다른 솔루션이 나왔을까 궁금하여 이것저것 찾아보는 중인데 못찾겠네요.
64bit OS 환경에서 32bit COM 기능을 웹 애플리케이션에서 쓸 수 있는 방법은 진정 없는 것인가요?










[최초 등록일: ]
[최종 수정일: 2/29/2012]


비밀번호

댓글 작성자
 



2012-02-29 10시46분
일단 원칙은, 32bit 로 빌드된 COM 개체는 반드시 32bit EXE 에서만 활성화 될 수 있습니다. (64비트 DLL 은 64bit EXE에.) 위의 글에서 debug 로 빌드 했을 때는 잘 되었다고 하는데요... 제 생각에는 아마 debug 빌드 시에 EXE 프로젝트 속성이 AnyCPU가 아니라 x86 으로 맞춰졌을 수도 있습니다.

만약, COM 개체를 만든 업체가 64비트로 업데이트를 못하는 경우라면, 어쩔 수 없습니다. 무조건 해당 COM 개체를 사용하는 응용 프로그램은 32비트여야 합니다.

64비트 운영체제에서 웹 애플리케이션의 경우, 기본적으로 w3wp.exe 가 64비트로 뜨게 되어 있습니다. 이를 32비트로 바꾸려면 IIS 관리자에서 웹 사이트가 속한 Application Pool 의 속성창에서 "Enable 32-Bit Applications" 속성을 True 로 설정해 주어야 합니다.

윈도우 서버 2003 의 경우에는 다음의 글을 보시고,

Configuring IIS to Run 32-bit Applications on 64-bit Windows (IIS 6.0)
; http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/405f5bb5-87a3-43d2-8138-54b75db73aa1.mspx?mfr=true

2008 의 경우에는 다음의 글을 보시고 설정하시면 됩니다.
How to enable a 32-bit Application Pool in IIS7 (Dedicated/VPS)
; https://help.webcontrolcenter.com/KB/a1114/how-to-enable-a-32-bit-application-pool-in-iis7-dedicatedvps.aspx

만약, 해당 COM 개체가 UI를 포함하지 않은 단순 함수 호출 식의 기능이고 호출 속도가 문제되지 않는 경우라면, IIS 프로세스와 별도로 분리해서 호스팅하는 것도 방법입니다. 즉, 32비트 용의 EXE 프로세스를 만들고 거기서 WCF 메서드를 노출한다음, 그 내부에서 COM 개체에 대한 함수 호출을 대행해 주는 것입니다. 이렇게 하면, 굳이 w3wp.exe 를 32비트로 내리지 않아도 되는 장점이 있습니다. ^^ (물론, 대행 EXE 프로세스는 나중에 NT 서비스로 등록해 주어야 관리적인 면에서 IIS 웹 서비스와 어울릴 것입니다.)
정성태
2012-02-29 11시00분
[임동찬] 빠른답변 감사드립니다. 알려주신대로 테스트 해보겠습니다.
[guest]

... 16  17  18  19  20  21  22  23  24  25  26  27  28  [29]  30  ...
NoWriterDateCnt.TitleFile(s)
5155세퉁5/7/201910420관리자 권한으로 실행 시 알림창(?) 없이 바로 실행 시킬 수 있는 방법이 있을까요?? [2]파일 다운로드1
5154Soul...5/4/20197290NamedPipe 질문드립니다. [2]
5153개태5/4/20198253WCF RESTful Service에서 enum을 parameter로 쓰는방법 [2]
5152세퉁5/3/20199372인터넷 시간을 불러와 pc에 적용 시키고 싶습니다. [3]파일 다운로드1
5151이대희5/3/20197487C# 7.3으로 개정판 출간 계획이 있으신가요? [1]
5150김이현5/2/20198865C# 딕셔너리 생성에 대해 질문드립니다. [1]
5149민성5/1/20197110ftp 이미지 업로드중 [1]
5148wpf질문4/30/20197468특정 사이트를 wpf에서 popup을 항상 허용하게 할려면 어떻게 해야할까요? [5]
5147민성4/30/20196499wpf에서 작업관리자를 띠울려면 어떻게 해야 하나요? [1]
5146불파겐4/25/20196557하나의 필드를 여러 스레드에서 읽어갈 때 스레드 동기화를 하지 않으면 문제가 생길까요? [2]
5145e구름4/17/20199508Properties.Setting.Default값에 대해 질문드립니다. [2]
5144성태님 ...4/17/20196770질문하시기 전에 10000 페이지 오류 납니다. [1]
5143헌이4/16/20197694윈도우 작업표시줄에 프로그램 띄우기 [2]파일 다운로드1
5142cab2...4/9/201913261C#으로 만든 DLL 배포하기 [10]
5141하늘사랑4/5/20198122Axinterop 래퍼에 관해서 질문드립니다. [7]
5140게스트4/1/20197767안녕하세요. 초보 개발자입니다. SD리더기에서 SD카드를 꽂으면 발생하는 이벤트 문의 [2]
5139김이현3/28/201910972C#에서 CRON 같은 스케줄러를 사용하려면 어떻게 해야 하나요? [3]
5138김지원3/22/20198617유니티 쉐이더에서 오로지 포워드 애드 패스로만 만들 수 있을까요? [1]
5137세퉁3/22/201910560wpf 쓰레드에 대해 질문 있습니다. [4]
5136KGY3/13/20197201안녕하세요 닷넷코어 콘솔 프로그램 관련 질문입니다. [1]
5135러쎌3/13/20197671ASP.NET 공부 관련해서 문의를 드립니다. [1]
5134이정호3/12/20197047SampleProfiler 예제를 이용한 Class 객체의 접근 문의 [1]파일 다운로드1
5133ㅇㅇ3/12/20197952멀티코어사용 방법에 궁금한것이 있습니다. [3]
5132존기미3/3/20198206Physical Disk Access문의 [1]
5131강용규2/25/20197300c# 개발자입니다. 타이머 질문드립니다. [1]
5130노인코래방2/25/201910852C#에서 가장 좋은 성능을 보이는 파일 읽고 쓰는 방법이 무엇인가요? [2]
... 16  17  18  19  20  21  22  23  24  25  26  27  28  [29]  30  ...