2016-11-18 15 views
2

MTA 스레드 컨텍스트 (.Net WebApi 요청)에서 호출 할 수있는 STA 원격 응용 프로그램 유형 라이브러리 (스레드 모델 및 아파트 관점에서 안전한)를 둘러싼 C#의 런타임 호출 가능 래퍼가 있습니까?WebApi에서 STA COM 개체 호출

서버 STA 응용 프로그램을 MTA로 변경해야합니까? 그렇지 않으면 RCW가 이러한 메커니즘을 처리합니까?

답변

1

RCW는 COM 프록시 용 .NET 프록시입니다. .NET 응용 프로그램에서 어떤 아파트를 사용하든 관계없이 RCW가 마샬링을 처리합니다.

개체가 원격이므로 아파트가 호환되는지, 통신이 프로세스를 교차하는지 걱정할 필요가 없습니다. C++와 같은 모국어와 환경을 사용한다면 아파트 전체에서 COM 프록시를 공유하지 않아도된다는 말, 즉 각 아파트의 프록시 참조를 적절하게 마샬링하기 만하면됩니다.

개체가 진행중인 경우 동일한 아파트를 공유하는 성능이 향상되지만 프로세스간에 마샬링 및 스레드 일정 지연이 가장 큰 오버 헤드가됩니다.

그러나 다른 응용 프로그램이 사용하는 아파트를 고려해야합니다. STA를 사용하는 응용 프로그램은 단일 스레드가되므로 ASP.NET 응용 프로그램의 병목 현상이됩니다. MTA를 사용하는 경우, 그렇지 않은 경우, 모든 호출을 동기화하지 않거나 중요한 섹션이 빠르면.

응용 프로그램의 경우 일반적으로 사용 된 아파트를 제어 할 수 없습니다. 그 아파트를 어떻게 바꾸시겠습니까? COM + 구성 요소입니까? 이게 당신의 코드인가요? 아파트 전환 준비가 되었습니까?

+0

기본적으로 저는 자유 스레드로 변경하고 코드의 중요한 영역에서 일부 잠금을 적용 할 것입니다. 그러나이 IPC 메커니즘은 애플리케이션의 다른 기능에 비해 거의 사용되지 않으므로 성능은 문제가되지 않습니다. 나는 그대로 떠날 것 같아. – EProgrammerNotFound

+0

RCW의 클래스 생성자에서 문제가 발생했습니다. 간헐적으로 type_e_cantloadlibrary를 발생시키고 out-of-proc 서버 해결을 해결하지만 이는 프로덕션 환경의 품질 솔루션이 아닙니다. 그러므로 질문. – EProgrammerNotFound

+1

나는 out-of-process 서버 (EXE, 대리모를 사용하는 DLL) 대신 in-process 서버 (DLL)에 대해 이야기하고 있다고 생각합니다. 등록 된 아파트를 레지스트리에서 쉽게 처리 할 수있는 in-process 서버로 변경하지만 서버가 해당 유형의 아파트를 지원해야합니다. 대용을 사용하지 않는 out-of-process 서버에서 사용하는 아파트를 변경하면 일반적으로 코드를 변경하거나 응용 프로그램 별 설정을 사용합니다. – acelent