Я написал модель клиент-сервер в C# с использованием удаленного доступа .Net. Если у меня есть клиент, подключенный к серверу, то убивайте сервер и перезагружайте его, не пытаясь вызвать какие-либо серверные методы у клиента, пока сервер не работает, я могу снова подключиться.Проблемы с подключением к клиенту/серверу
Если я закрою сервер, попробуйте выполнить ping-сервер от клиента (который я делаю из отдельного потока, чтобы избежать бесконечного ожидания), а затем, когда сервер возвращается в сеть, клиент никогда не сможет поговорить с ним и моим Ping поток, который был уволен во время простоя, всегда ждет в глубине кибер-библиотек. Я пытаюсь прервать это (если попытка присоединиться к потоку завершится через некоторое время), но он не будет прерван. Мне интересно, является ли это частью проблемы.
Если я запускаю другого клиента, то этот клиент может прекрасно общаться с сервером. Я решил, что мне нужно перезапустить некоторый аспект исходного клиента, но не могу видеть, что нужно будет отключить. Я, конечно, нулевой сервер, к которому я подключен, и вызываю Activator.GetObject с тем же адресом (что-то второй клиент делает для подключения к серверу, который отлично работает), но повторное получение сервера вообще не помогает.
Сервер работает как singleton через RegisterWellKnownServiceType.
Звучит как WCF - это путь. Это просто оглушает меня, что старый (и, следовательно, хорошо используемый и отлаженный) API, такой как удаленный доступ, имеет такие проблемы с тем, что должно быть его хлебом и маслом. Спасибо за совет. – 2009-04-18 08:57:20
Ну, DCOM - это более старый, гораздо более широко используемый API (например, основанный на WMI), но имеет еще больше проблем, чем удаленное выполнение .NET (особенно при нацеливании на безопасность). IIOP был чем угодно. Часть ответа заключается в том, что .NET remoting всегда играла вторую скрипту для веб-сервисов, но часть заключается в том, что удаленные протоколы просто сложно спроектировать и реализовать хорошо, чтобы охватить все случаи ... –