2010-01-20 5 views
3

다른 AppDomains (다른 사람이 개발 한 신뢰할 수없는 호스트 플러그인)의 호출을 허용하는 "AppDomain"서버가있는 응용 프로그램이 있습니다.원격 : 서버에서 클라이언트 AppDomain/어셈블리 찾기 AppDomain

서버 AppDomain에서 실제로이 전화를 걸고있는 "Plugin"(AppDomain)을 알아야하므로이 플러그인이 리소스에 액세스 할 수 있는지 확인할 수 있습니다.

리모팅 메서드 호출에 대한 자격 증명을 전달할 수는 있지만 "플러그 인 A"의 교활한 프로그래머가 코드를 변경하여 "플러그인 B" .

나는 "ChannelInfo.ChannelData는"전화를 만드는 플러그인 클라이언트에 대한 정보를 보유 할 수 있다고 생각하고, 서버 응용 프로그램에 대한 내 자신의 "ObjRef를"구현을 만들기로보고, 다음과 같은 코드를 구현 :

public int DomainId 
    { 
     get 
     { 
      int domainId = -1; 

      // The type "System.Runtime.Remoting.Channels.CrossAppDomainData" is not Public, 
      // so we have to use reflection to get access to it. 
      for (int i = 0; i < ChannelInfo.ChannelData.Length; i++) 
      { 
       object o = ChannelInfo.ChannelData[i]; 
       if (o.ToString() == "System.Runtime.Remoting.Channels.CrossAppDomainData") 
       { 
        System.Reflection.BindingFlags flags = 
         System.Reflection.BindingFlags.GetProperty 
         | System.Reflection.BindingFlags.Instance 
         | System.Reflection.BindingFlags.NonPublic; 

        domainId = (int)o.GetType().GetProperty("DomainID", flags).GetValue(o, null); 
       } 
      } 
      return domainId; 
     } 
    } 
을 정말 클라이언트 (발신자)의 AppDomain 이드 할 때

그것은이 같은 느낌

너무 열심히

어떤 아이디어 :-)되는 서버가 AppDomain.CurrentDomain.Id로

는하지만이에 의해 검색된 DomainId은 동일 ?

답변

0

통화 컨텍스트에 티켓을달라고 요청할 수 있습니까? 할 수 있으면 호출자를 식별하고 결과적으로 행동하는 것이 쉽습니다. 아마도 최상의 솔루션이 아니지만 작동해야합니다. 우리는 그것들을했고 그것은 여전히 ​​자극적이라고 생각합니다.)

관련 문제