Webservice 프록시가 COM에 노출되는 것을 우아하게 방지하는 방법은 무엇입니까?
-
22-07-2019 - |
문제
관리되지 않는 C ++ 애플리케이션에서 소비하는 In-Proc COM 서버로 사용하는 C# 어셈블리가 있습니다. 어셈블리는 변경되지 않은 웹 서비스를 소비하므로 웹 서비스 프록시 클래스를 업데이트 할 필요가 없습니다. 그렇기 때문에 프록시 클래스가 한 번 생성되고 Reference.cs
파일은 단순히 저장소에 넣고 거기에서만 컴파일됩니다.
문제는 기본적으로 WebService 프록시 클래스가 공개되므로 com에 노출된다는 것입니다. 이것은 typelib 및 오염 물질 레지스트리를 팽창시킵니다. 내부의 가시성 변경은 어셈블리를 중단하므로 해당 엔터티는 공개적으로 유지해야하지만 COM에 노출 될 필요는 없습니다.
멍청한 방법은 모든 공개 인터페이스/클래스에 접근하는 것입니다. Reference.cs
파일과 함께 표시하십시오
[System.Runtime.InteropServices.ComVisible(false)]
그 후에는 더 이상 com에 노출되지 않습니다.
더 좋은 방법이 있습니까?
해결책
당신은 할 수 있습니다
- 어셈블리 자체를 표시하지 마십시오
ComVisible
그리고 노출하려는 모든 인터페이스/클래스/열거를 명시 적으로 표시하십시오.COM
~처럼ComVisible
. 두 번째 파일과 부분 클래스를 사용하여 프록시 유형을 표시하십시오.
ComVisible(false)
[System.Runtime.InteropServices.ComVisible(false)] partial class YourProxyType {} [System.Runtime.InteropServices.ComVisible(false)] partial class AnotherProxyType {}
제휴하지 않습니다 StackOverflow