Webservice 프록시가 COM에 노출되는 것을 우아하게 방지하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1649752

문제

관리되지 않는 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 {}
    
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top