.net Remoting:检测服务器是否未运行

时间:2010-08-03 18:37:56

标签: c# .net delegates remoting iasyncresult

我正在开发一个使用.net远程处理IPC的应用程序。

当我的客户端应用启动时,它使用以下代码连接到服务器:

  chnl = gcnew HttpChannel();
  ChannelServices::RegisterChannel(chnl, false);      
  IPCObjectInstance = (BaseRemoteObject)Activator.GetObject(
     typeof(BaseRemoteObject),
     "http://localhost:1237/MyRemoteObject.soap");

而且,当我进行函数调用时,我使用以下代码:

  BaseRemoteObject.GetFileTextDelegate svd = new BaseRemoteObject.GetFileTextDelegate(IPCObjectInstance, BaseRemoteObject.GetFileText);
  AsyncCallback  callback  = new AsyncCallback(this, &ClientGUI.RecievedStringText);
  IAsyncResult  arValSet  = svd.BeginInvoke(callback, null);

此代码原样很棒。但是,我希望我的客户端在启动时检测服务器是否正在运行,并显示相应的错误消息。

当服务器未运行时,客户端会等待大约3秒钟,然后再抛出Web异常(如下图所示)。没有错误“位置”,所以我不确定将try \ catch块放在何处。

检测我的服务器没有运行的最佳方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

应该尝试/抓住BeginInvoke行。

但我的建议是创建一个Status方法,你可以同步调用而不是异步,并尝试/捕捉该调用。它可以是一种无效的虚拟方法。

还可以在指定的端口上打开与远程服务器的tcp连接,并查看是否有连接。但这就像试试/捕捉远程呼叫一样。