2009-04-16 4 views
1

Я написал модель клиент-сервер в C# с использованием удаленного доступа .Net. Если у меня есть клиент, подключенный к серверу, то убивайте сервер и перезагружайте его, не пытаясь вызвать какие-либо серверные методы у клиента, пока сервер не работает, я могу снова подключиться.Проблемы с подключением к клиенту/серверу

Если я закрою сервер, попробуйте выполнить ping-сервер от клиента (который я делаю из отдельного потока, чтобы избежать бесконечного ожидания), а затем, когда сервер возвращается в сеть, клиент никогда не сможет поговорить с ним и моим Ping поток, который был уволен во время простоя, всегда ждет в глубине кибер-библиотек. Я пытаюсь прервать это (если попытка присоединиться к потоку завершится через некоторое время), но он не будет прерван. Мне интересно, является ли это частью проблемы.

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

Сервер работает как singleton через RegisterWellKnownServiceType.

ответ

1

Я бы начал с wirehark и использовать его, чтобы увидеть, что действительно происходит через провод.

1

Является ли .NET удаленным требованием, или вы могли бы подумать о переходе на WCF? Протоколы лучше учитываются и более четко отображаются при необходимости.

+0

Звучит как WCF - это путь. Это просто оглушает меня, что старый (и, следовательно, хорошо используемый и отлаженный) API, такой как удаленный доступ, имеет такие проблемы с тем, что должно быть его хлебом и маслом. Спасибо за совет. – 2009-04-18 08:57:20

+1

Ну, DCOM - это более старый, гораздо более широко используемый API (например, основанный на WMI), но имеет еще больше проблем, чем удаленное выполнение .NET (особенно при нацеливании на безопасность). IIOP был чем угодно. Часть ответа заключается в том, что .NET remoting всегда играла вторую скрипту для веб-сервисов, но часть заключается в том, что удаленные протоколы просто сложно спроектировать и реализовать хорошо, чтобы охватить все случаи ... –

0

Я решал аналогичную проблему. У меня было рабочее удаленное приложение .NET с использованием файлов конфигурации для удаленных операций и подпрограмм удаленной работы .NET, которые мне пришлось интегрировать в более крупное приложение. Я включил его в более крупный проект, а Activator.GetObject вернул экземпляр прокси. Как только был вызов участника из экземпляра прокси, он оказался внутри вызова участника и не мог выйти. В более крупном приложении содержались различные файлы конфигурации, и, таким образом, конфигурации удаленного взаимодействия .NET, которые я разместил там, вместе с другими конфигами для других, и был основной вопрос. После того, как я разместил конфигурацию удаленного доступа .NET в новом пустом файле config (s), удаленный запуск .NET в более крупном приложении начал работать.

Смежные вопросы