![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
opozdaika |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 28.4.2008 Репутация: нет Всего: нет |
Нужно, чтобы клиетны ремоутигна подписывались на событие сервера. Я вынес в DLL не только объект ремоутигна, но и даже некую фабрику по его производству. И все равно работает только в том случае, если на компьютере-СЕРВЕРЕ я кладу в папку, где лежит server.exe, копию файла client.exe, который там по моему скромному мнению вообще не нужен. Да еще и ругается, зараза, если копия client.exe не совсем свежая.
Если я не положу копию клиентского exe, то работает все следущим образом. Запускаю на компьютере-сервере server.exe, на комепьютере-клиенте client.exe. Пока не подписываю клиента на событие. Они работают нормально, т.е. я могу на клиенте вызывать функции удаленного объекта, сервер на эти вызовы реагирует. Затем я произвожу на клиенте подписку на событие:
RemotingEvent - поле event; RemotingEventDelegate - делегат такого же типа, что и RemotingEvent; MyHandler() - функция-обработчик события, реализованная внутри кода client.exe В этот момент на компьюрере-КЛИЕНТЕ появляется окно ошибки, произошедшей на СЕРВЕРЕ. Текст в окне такой (RemotingClient -это фактическое имя моего клиентского exe):
Если положить копию client.exe под бок к server.exe, то все работает. Да, я согласен, что функция-обработчик реализована у меня в client.exe Ну и что с этого? Зачем же server.exe лезет загружать копию сборкуи client.exe - ведь это всего лишь копия, которая не в работе. Истинный client.exe в это время работает на другом компьютере! Это что, такой "свадебный генерал" получается, которого я должен держать на сервере чисто для мебели? Короче, вопрос: как избавиться от неоходимости держать копию клиентского exe на стороне сервера при реализации подписки на собыдия сервера при ремоутинге? Спасибо. |
||||
|
|||||
mihryak |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 3 Всего: 36 |
вынеси все общие для клиента-сервера типы в отдельную сборку и добавь на неё и там, и там референсы
у тебя же, судя по всему, сервер референсит клиента |
|||
|
||||
QryStaL |
|
||||
![]() Intellectual feast ![]() ![]() Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: нет Всего: 32 |
opozdaika, это классическая проблема при работе с делегатами через Remoting. Проблема в том, что на стороне сервера должна быть сборка с классом, на метод которого ссылается экземпляр делегата.
Для того, чтобы корректно десериализовать делегат на той стороне.
Advanced .NET Remoting, Second Edition p. 213 Remoting Events Если вкратце: Instead, you can introduce an intermediate MarshalByRefObject (including the implementation, not only the interface) that will be located in General.dll and will therefore be accessible by both client and server. -------------------- I don't need a reason being who I am... |
||||
|
|||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |