다른 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은 동일 ?