Я написал модель клиент / сервер на C # с использованием удаленного взаимодействия .Net. Если у меня есть клиент, подключенный к серверу, затем убить сервер и перезапустить его, не пытаясь вызвать какие-либо серверные методы с клиента, пока сервер не работает, я могу счастливо подключиться.
Если я закрываю сервер, затем пытаюсь пропинговать сервер с клиента (что я делаю из отдельного потока, чтобы избежать бесконечного ожидания), тогда, когда сервер возвращается в оперативный режим, клиент никогда не может общаться с ним и моим потоком Ping То, что было запущено во время простоя, навсегда ждет глубоко в кишечнике удаленных библиотек. Я пытаюсь прервать это (если попытка присоединиться к потоку не удастся через короткое время), но он не прервется. Мне интересно, если это является частью проблемы.
Если я запускаю другого клиента, то этот клиент может нормально общаться с сервером. Я подумал, что мне нужно перезапустить некоторые аспекты оригинального клиента, но не вижу, что нужно будет закрыть. Я, конечно, обнуляю сервер, к которому подключен, и вызываю Activator.GetObject с тем же адресом (что делает второй клиент для подключения к серверу, что работает нормально), но повторное получение сервера совсем не помогает.
Сервер работает как синглтон через RegisterWellKnownServiceType.