2012-09-27 3 views
1

.NET Remoting이 WCF로 대체되었다는 것을 알고 있지만 이것은 다른 것보다 학문적 인 질문입니다..NET Remoting에서 객체가 원격 객체로 사용되는지 어떻게 알 수 있습니까?

public class MyObject : MarshalByRefObject 
{ 
} 

을 그리고 당신은 형을 MyObject의 원격 가능 객체를 인스턴스화하지만 원격 가능 객체로서 사용하지 않는 클라이언트 코드가 있다고 가정 :

는 다음과 같이 정의 된 원격 가능 클래스가 있다고 가정

public static void Main(String[] args) 
{ 
    MyObject mo = new MyObject(); 
} 

이제 프로그래밍 방식으로 말의 유형을 말하고 싶다고 가정 해 보겠습니다. 내가 아는 한,있다, 두 가지 방법으로 그것을 할 수 있습니다 :

Console.WriteLine(mo.GetType().ToString());//MyObject 

또는

Console.WriteLine(GetType(mo).ToString()); //MyObject 
다음과 같이 GetType을()가 정의되어

:

static Type GetType<T>(T t) 
{ 
    return typeof(T); 
} 

를 두 경우 모두에서 컴파일 시간 유형 및 런타임의 런타임 유형은 MyObject입니다. 지금

그러나

내가 실제로 원격 가능 개체로 MyObject를의 인스턴스를 사용하는 클라이언트 코드가 있다고 가정 : 나는 내가 사용하는 두 가지 방법 중 하나를 사용할 수 있습니다 개월의 유형을 알고 싶다면

public static void Main(String[] args) 
{ 
    System.Runtime.Remoting.RemotingConfiguration.Configure("Client.exe.config"); 
    MyObject mo = new MyObject(); 
} 

위와 같은 결과를 얻을 수 있습니다. 그러나 중단 점을 배치하고 F5 키를 누르면 Visual Studio에서 mo의 유형이 실제로 MyObject {System.Runtime.Remoting.Proxy.__ TransparentProxy}가됩니다.

내가 알고 싶은 것은 프로그래밍 방식으로, mo의 기본 유형은 __TransparentProxy입니다.

답변

3
bool isProxy = System.Runtime.Remoting.RemotingServices.IsTransparentProxy(obj); 
+0

매우 도움이됩니다. 감사. 단지 참조 용으로 원격 처리 가능한 객체로 사용되는 경우에도 SoapSuds 도구로 생성 된 어셈블리 내에 정의 된 유형의 인스턴스에 대해 위의 내용이 유지되지 않는다고 추가합니다. –

관련 문제