Проблемы соединения клиент / сервер - PullRequest
1 голос
/ 16 апреля 2009

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

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

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

Сервер работает как синглтон через RegisterWellKnownServiceType.

Ответы [ 3 ]

1 голос
/ 17 апреля 2009

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

1 голос
/ 16 апреля 2009

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

0 голосов
/ 20 октября 2011

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

...