.NET에는 별도의 appdomain 또는 물리적 컴퓨터 사이에서 객체를 전달할 수있는 remoting이라는 것이 있습니다. 나는 마술이 어떻게 이루어 졌는지 완전히 이해하지 못한다. 그러므로이 질문을한다.MarshalByRefObject가 특별합니까?
리모컨에는 객체를 전달하는 두 가지 기본 방법이 있습니다. 직렬화 (한 묶음으로 변환하고 다른 끝에 재구성)하거나 MarshalByRefObject에서 상속 할 수 있습니다.이 경우 .NET에서는 일부를 만듭니다. 투명한 프록시와 모든 메소드 호출은 원래 인스턴스로 다시 전달됩니다.
이것은 매우 시원하고 마술처럼 작동합니다. 그리고 나는 프로그래밍에있어서 마술을 좋아하지 않는다. Reflector로 MarshalByRefObject
을 보면 다른 일반적인 물체와 구별되는 것을 볼 수 없습니다. 이상한 내부 속성이나 아무것도 없습니다. 그렇다면 전체 투명 프록시는 어떻게 구성되어 있습니까? 그런 메커니즘을 직접 만들 수 있습니까? MarshalByRefObject
에서 상속받지 못했지만 여전히 동일한 역할을 수행 할 수있는 대체 MyMarshalByRefObject
을 만들 수 있습니까? 또는 MarshalByRefObject
은 .NET 엔진 자체에서 일부 특별한 대우를 받고 있으며 전체 리모팅 업적은 단순한 필사자가 아닌 이중화가 가능합니까?
.NET Remoting이 MarshalByRefObject를 상속 한 모든 클래스를 특별한 방식으로 처리하는 경우 "MarshalByRefObject is special"자격을 갖습니까? Reflector를 .NET Remoting에서 사용하고 마법을 찾으십시오. BTW, .NET Remoting은 MarshalByRefObject와 함께 더 이상 사용되지 않습니다. 물론 사용할 수 있지만 WCF는 현재 .NET에서 "원격 아키텍처"가 가장 많이 사용됩니다. –
WCF는 여전히 MarshalByRefObject를 지원합니다. – Schneider
마법은 지터에 있으며, MBRO 클래스를 특별하게 취급합니다. 더 이상 클래스의 필드에 직접 액세스하지 않지만 대신 CLR 도우미 메서드를 사용하는 코드를 생성합니다. 어떤 객체가 리모콘인지 알고 있으므로 프록시 호출을 생성 할시기를 알고 있습니다. –