2012-02-10 7 views
4

VS2010 C# 프로젝트에는 MarshalByRefObject에서 파생 된 클래스가 있고 Activator.GetObject를 사용하여이 클래스를 설정합니다. 이 파생 클래스를 사용하여 네트워크를 통해 컴퓨터와 통신합니다.MarshalByRefObject가 유효한지 테스트하는 방법은 무엇입니까?

때때로 대상 컴퓨터가 켜져 있고 ping을 수행 할 수 있지만 대화하려는 프로그램이 실행되고 있지 않은 경우 30 초 대기 후 예외가 발생합니다. 내 파생 된 MarshalByRefObject가 유효한지 알 수있는 방법이 있습니까?

현재 try/catch가이 상황을 처리하고 있지만 30 초 대기는 허용되지 않습니다.

+0

당신이 넣을 수 있습니다 ... 작업이 핑() 메서드를 호출하고, 작업에 명시 적 제한 시간을 사용 가진 시도 마샬링하는 수 코드..? Tunneling을하고 있습니까? Tunel Claass – MethodMan

+0

"대상 컴퓨터가 적극적으로 거부했기 때문에 연결할 수 없습니다. IP : Port"터널링을 사용하고 있다고 생각하지 않습니다. – LightLabyrinth

답변

4

당신은 정확한 오류 MSG뿐만 아니라 쇼가 어떻게 무엇을

Task task = new Task(() => { try { obj.Ping(); } catch {} }); 
task.Start(); 
if(!task.Wait(1000)) throw new TimeoutException(); 
// handle other task exceptions etc 
+0

고마워요, 제가 찾고 있던 것이 아니지만 대기 시간이 크게 줄어 들었습니다. – LightLabyrinth

+0

@LightLabyrinth note : 당신은 try/catch **를 가지고 있어야합니다 ** 대리자 내부 –

+0

이 솔루션은 "SocketException이 사용자 코드에 의해 처리되지 않았습니다"- "대상 컴퓨터가 그것을 적극적으로 거부했기 때문에 연결할 수 없습니다 :포트". 이것은 try/catch 안에 있습니다. google을 사용하여 다른 스레드에서 발생하는 것 같아서 잡을 수 없습니다 ... 행운과 함께 델리게이트 안에 try/catch를 시도했습니다. – LightLabyrinth

관련 문제