![]() |
|
Модераторы: gambit |
![]()
|
|
| Alexsar |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.5.2005 Репутация: нет Всего: 1 |
Всем доброго дня, ночи(нужное подчеркнуть)
Проблема заключается в следущем как осуществить обратную связь, т.е. когда сам объект активирует событие и вызывает делегаты клиентов. В книге по .Net Remoting орисан пример, где клиент подписывается на событие удалённого объекта. Но вот загвоздка, когда в клиентах производится подписание на событие например так
возникает исключение : Type System.DelegateSerializationHolder and the types derived from it (such as System.DelegateSerializationHolder) are not permitted to be deserialized at this security level. Компилятор почему то не хочет это сделать, хотя для сервера он нормально проходит и можно вызывать клиентом методы удалённого объекта, в которых генерируется события и сервер их нормально обрабатывает. Что нужно исправить чтоб подписать клиенты на события удалённого обекта, для примера привожу свой код: 1. Ob.dll:
2. Client.exe:
3. Server.exe :
что нужно исправить, чтоб всё заработало, желательно с этим примером З.Ы. я только начал изучать .Net Remoting, помогите Это сообщение отредактировал(а) Alexsar - 18.8.2006, 23:10 |
||||||||
|
|||||||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 2 Всего: 232 |
При регистрации объекта на серверной стороне надо TypeFilterLevel выставить в TypeFilterLevel.Full
Например так:
-------------------- ![]() |
|||
|
||||
| Alexsar |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.5.2005 Репутация: нет Всего: 1 |
TО mr.DUDA
И снова я во-первых, хочу извиниться я немного накосячил с примером, я его отредактировал я пробовал так как написано выше в серверной сборке, не помогло вот фрагмент кода
при компиляции клиента возникает ошибка, мол не могу подключиться, а если сервер вызывает метод удалённого объекта для отправки сообщения, то возникает так же ошибка: ссылочный объект не установлен, т.е. никто не подписался на обработку этого сообщения вопрос открыт, что не так? если есть на 100% рабочие коды, то буду благодарен |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 2 Всего: 232 |
Проблема в том, что для того чтобы клиенту получить что-либо от сервера, необходимо клиенту самому что-то спросить у сервера (т.е. вызвать метод) - тогда и будут выполнены обработчики событий, сгенерированные сервером в процессе выполнения метода. По сути, если я ничего не путаю, вызов метода и обработка событий есть один большой вызов метода с клиента на сервер, где часть метода выполняется на сервере, а часть - на клиенте.
Как заставить клиент произвольно реагировать на события, генерируемые сервером - непонятно. Скорее всего, никак. Или создать обратную связь на уровне ремоутинга, т.е. TcpChannel "сервер->клиент" и т.д. -------------------- ![]() |
|||
|
||||
| Alexsar |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.5.2005 Репутация: нет Всего: 1 |
не совсем понятно, т.е. я должен сначала вызвать метод удалённого объекта из клиента, а только потом подписывать на события? т.е. так?
и ещё как создать обратную связь на уровне ремоутинга, т.е. TcpChannel "сервер->клиент", что это такое, создание нового удалённого объекта, который сделает клиент сервером, а первоначальный сервер клиентом? |
||||
|
|||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 2 Всего: 232 |
Нет. Подписаться клиентом на событие серверного объекта, а потом вызвать с клиента метод. Если серверный метод сгенерирует событие, то клиент обработает его. Вроде так. Ещё раз повторюсь, я не проверял это, просто по логике должно быть так. Да. -------------------- ![]() |
|||
|
||||
| Alexsar |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.5.2005 Репутация: нет Всего: 1 |
а какой метод надо вызывать любой или конкретно, тот который генерит событие, например как у меня SendMessage?
на счёт создать обратную связь на уровне ремоутинга, т.е. TcpChannel "сервер->клиент", это я сделал, оба приложения нормально работают, это первое что я сделал. просто в книге встретил пример, где клиенты обрабатывают события сгенерированные сервером. |
|||
|
||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 3 Всего: 61 |
Alexsar, нет. нельзя. не получится.только как ты сам сделал изначально, и как сказал mr.DUDA
почему? потому что вызов клиентского кода с сервера, чем по сути является вызов события с подписчиком, находящимся вне серверного апдомена, не сработает. почему? потому архитектура ремоутинга так построена, что это клиенты обращаются к серверу за чем либо, а не наоборот. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |