2009-04-16 11 views
1

J'ai écrit un modèle client/serveur en C# à l'aide de .Net Remoting. Si j'ai le client connecté au serveur, alors tuez le serveur et le redémarrez sans essayer d'appeler des méthodes de serveur du client tandis que le serveur est arrêté, je peux me reconnecter heureusement. Si je ferme le serveur, puis essayez d'envoyer une requête ping au serveur à partir du client (ce que je fais d'un thread séparé pour éviter une attente interminable) puis quand le serveur revient en ligne, le client ne peut jamais lui parler et mon Ping thread qui a été tiré pendant l'arrêt attend toujours profondément dans les tripes des bibliothèques à distance. J'essaye d'abandonner ceci (si j'essaie de rejoindre le thread échoue après un court moment) mais il n'abandonnera pas. Je me demande si cela fait partie du problème.Problèmes de connexion client/serveur

Si je démarre un autre client, ce client peut très bien communiquer avec le serveur. J'ai pensé que je devais redémarrer certains aspects du client d'origine, mais je ne vois pas ce qui devrait être arrêté. Je supprime certainement le serveur auquel je suis connecté et j'appelle Activator.GetObject avec la même adresse (ce que fait le second client pour se connecter au serveur, ce qui fonctionne bien), mais ré-obtenir le serveur n'aide pas du tout.

Le serveur exécute un singleton via RegisterWellKnownServiceType.

Répondre

1

Je voudrais commencer par wireshark et l'utiliser pour voir ce qui se passe réellement à travers le fil.

1

Est-ce que .NET remet une exigence, ou pourriez-vous envisager de passer à WCF à la place? Les protocoles sont mieux factorisés et plus clairement exposés en cas de besoin.

+0

Il semble que WCF soit la solution. Cela m'étonne juste qu'une ancienne API (et donc bien utilisée et déboguée) comme le remoting a de tels problèmes à faire quelque chose qui devrait être son pain et son beurre. Merci pour le conseil. –

+1

Eh bien, DCOM est une ancienne API beaucoup plus répandue (sous-jacente à WMI, par exemple), mais elle a encore plus de problèmes que l'accès à distance .NET (surtout quand on vise la sécurité). IIOP était tout sauf. Une partie de la réponse est que .NET Remoting a toujours joué le second rôle dans les services Web, mais une partie est que les protocoles à distance sont tout simplement difficiles à concevoir et à mettre en œuvre bien pour couvrir tous les cas ... –

0

Je résolvais un problème similaire. J'avais une application remoting .NET fonctionnant en utilisant des fichiers de configuration pour le remoting et les routines du remoting .NET que je devais intégrer dans une plus grande application. J'ai intégré cela dans le projet plus grand, par le Activator.GetObject a renvoyé une instance du proxy. Dès qu'il y a eu un appel d'un membre de l'instance de proxy, il s'est retrouvé dans l'appel du membre et n'a pas pu le faire. La plus grande application contenait déjà divers fichiers de configuration, ainsi les configurations d'accès à distance .NET que je plaçais juste là avec d'autres configs pour d'autres thihs, et il y avait le nœud du problème. Après avoir placé les configurations Remoting .NET dans un nouveau fichier config (s) vide, le remoting .NET dans l'application plus grande a commencé à fonctionner.