Remoting клиент и сервер в одном флаконе
От: Максим Алексейкин США  
Дата: 12.05.04 13:21
Оценка:
Привет всем.
Ситуация:

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

Теперь вопрос:

Если серверное приложение закрывается, то одно из клиентский должно стать сервером.
Как это реализовать, другими словами, как после вызова RegisterWellKnownClientType(...) вызвать RegisterWellKnownServiceType(...) для того же класса?
Re: Remoting клиент и сервер в одном флаконе
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 12.05.04 14:02
Оценка:
Здравствуйте, Максим Алексейкин, Вы писали:

МА>Есть приложение, к-рое запускают в большом кол-ве на одной машине.

МА>Внутри приложения есть функциональность, к-рая работает лишь в одном экземпляре приложения, но необходима всем другим экземплярам. Я хочу реализовать доступ к этой функциональности через ремоутинг (серверная активация SingleCall). Приложение, к-рое запущенно первым становится сервером, остальные клиентами.

МА>Теперь вопрос:


МА>Если серверное приложение закрывается, то одно из клиентский должно стать сервером.

МА>Как это реализовать, другими словами, как после вызова RegisterWellKnownClientType(...) вызвать RegisterWellKnownServiceType(...) для того же класса?

Это тебе скорее в дизайн надо. Алгоритмов есть несколько, чаще всего используется примерно следующий: если в сети нет сервера то назначаются выборы, в ходе которых по определенным признакам выбирается оптимальный. После этого он становится сервером.
... << RSDN@Home 1.1.4 beta 1 >>
AVK Blog
Re[2]: Remoting клиент и сервер в одном флаконе
От: Максим Алексейкин США  
Дата: 13.05.04 06:46
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Это тебе скорее в дизайн надо. Алгоритмов есть несколько, чаще всего используется примерно следующий: если в сети нет сервера то назначаются выборы, в ходе которых по определенным признакам выбирается оптимальный. После этого он становится сервером.


С алгоритмом выбора как раз нет проблем, захватил мьютекс и все ОК. Зона действия ограничена одной машиной. Ремоутинг используется для межпроцесного взаимодействия. Проблема в том, что зарегистрировав клиент я не могу его сделать сервером.
Выскакивает exception:
"Attempt to register a well-known or activated service type of type 'MyType'. This is not allowed since the type has already been redirected activate elsewhere."

Как его разрегистрировать и деактивировать? Не грузить же модуль в отдельный домен
Re[3]: Remoting клиент и сервер в одном флаконе
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.05.04 08:44
Оценка:
Здравствуйте, Максим Алексейкин, Вы писали:

МА>Выскакивает exception:

МА>"Attempt to register a well-known or activated service type of type 'MyType'. This is not allowed since the type has already been redirected activate elsewhere."

Не используй вобще эту фичу на клиенте и поднимай удаленные объекты активатором.
... << RSDN@Home 1.1.4 beta 1 >>
AVK Blog
Re[4]: Remoting клиент и сервер в одном флаконе
От: Максим Алексейкин США  
Дата: 13.05.04 09:15
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Не используй вобще эту фичу на клиенте и поднимай удаленные объекты активатором.


В смысле? я что в этом случае не должен регить ремоутинг тип на клиенте?
Re[5]: Remoting клиент и сервер в одном флаконе
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.05.04 09:44
Оценка: 3 (1)
Здравствуйте, Максим Алексейкин, Вы писали:

МА>В смысле? я что в этом случае не должен регить ремоутинг тип на клиенте?


Ага.
... << RSDN@Home 1.1.4 beta 1 >>
AVK Blog
Re[6]: Remoting клиент и сервер в одном флаконе
От: Максим Алексейкин США  
Дата: 13.05.04 10:16
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Максим Алексейкин, Вы писали:


МА>>В смысле? я что в этом случае не должен регить ремоутинг тип на клиенте?


AVK>Ага.


Thanx a lot
все заработало.
Случайно не знаешь как для сокета, который используется каналом задать ReuseAddress.
Пока я сделал так:
IPEndPoint ep = new IPEndPoint(IPAddress.Any, PORT);
_socket = new Socket(AddressFamily.InterNetwork,
      SocketType.Stream,
      ProtocolType.Tcp);            
_socket.Bind(ep);
_socket.SetSocketOption(
      SocketOptionLevel.Socket, 
      SocketOptionName.ReuseAddress, 
      1);
_socket.Close();
// дальше регистрирую канал
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.