C# 如何测试MarshalByRefObject是否有效?

C# 如何测试MarshalByRefObject是否有效?,c#,activator,marshalbyrefobject,C#,Activator,Marshalbyrefobject,在VS2010 C#项目中,我们有一个从MarshallByRefObject派生的类,我们使用Activator.GetObject来设置它。我们使用这个派生类通过网络与机器对话 有时,目标机器已打开并能够ping,但它没有运行我们想要与之对话的程序,这会导致30秒的等待,然后出现异常。有没有办法判断我的派生MarshalByRefObject是否有效 当前try/catch正在处理这种情况,但30秒的等待时间是不可接受的。您可以尝试使用Ping()方法调用任务,并对任务使用显式超时 Task

在VS2010 C#项目中,我们有一个从MarshallByRefObject派生的类,我们使用Activator.GetObject来设置它。我们使用这个派生类通过网络与机器对话

有时,目标机器已打开并能够ping,但它没有运行我们想要与之对话的程序,这会导致30秒的等待,然后出现异常。有没有办法判断我的派生MarshalByRefObject是否有效


当前try/catch正在处理这种情况,但30秒的等待时间是不可接受的。

您可以尝试使用Ping()方法调用任务,并对任务使用显式超时

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

你能把什么错误消息以及显示你是如何编组的代码。。?你在挖隧道吗。。Tunel Claass“无法建立连接,因为目标计算机主动拒绝它IP:Port”我不相信我们正在使用任何隧道。谢谢,这不是我想要的,但它大大减少了等待时间。@Light迷宫注意:您可能应该在代理中尝试一下此解决方案似乎会导致错误“SocketException未经用户代码处理”-“无法建立连接,因为目标计算机主动拒绝它IP:port”。这是在try/catch中。使用google,这似乎发生在另一个线程中,因此我无法捕获它…我尝试在委托中放置try/catch,但运气不佳。@Light it is Task(()=>{try{obj.Ping();}抓住{};对吗?