2010-08-03 24 views
0

Je travaille sur une application qui utilise .net remoting pour IPC..net Remoting: détecter si un serveur ne fonctionne pas

Lorsque mon application client démarre, il utilise le code suivant pour se connecter au serveur:

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

Et, quand je fais mon appel de fonction, j'utilise le code suivant:

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

Ce code fonctionne grand tel quel. Toutefois, je souhaite que mon client détecte si le serveur est en cours d'exécution et affiche le message d'erreur approprié. Lorsque le serveur n'est pas en cours d'exécution, le client attend environ 3 secondes avant de déclencher une exception Web (voir en bas).

Il n'y a pas d'erreur "location", donc je ne suis pas sûr de savoir où placer le bloc try \ catch.

Quelle est la meilleure façon de détecter que mon serveur ne fonctionne pas?

Merci!

Répondre

1

Il devrait fonctionner pour essayer/attraper autour de votre ligne BeginInvoke.

Mais ma suggestion serait de créer une méthode Status que vous appelez de façon synchrone au lieu d'async, et essayez plutôt de contourner cet appel. Cela peut être une méthode factice qui ne fait rien.

Il est également possible d'ouvrir une connexion tcp au serveur distant sur le port spécifié et de voir si vous obtenez une connexion. Mais ce serait comme essayer/attraper autour d'un appel à distance.

+0

La fonction DoNothing appelée synchrone a bien fonctionné, merci! – greggorob64