Re: Вопрос по Remouting
От: varennik  
Дата: 09.09.06 02:29
Оценка: 1 (1)
Здравствуйте, Мартыненко Сергей, Вы писали:

МС>Добрый день!


МС>подскажите пожалуйста, есть ли возможность в каком либо Sink на стороне сервера получить имя класса и имя метода (свойства) к которому происходит обращение. На данный момент используется TCPChannel, BinaryServerFormatterSinkProvider и свой Sink который применяется до BinaryServerFormatterSinkProvider.


Посмотрите, может вот это
Автор: Нахлобуч
Дата: 02.12.05
окажектся полезным для вас.
---
Если ты хочешь рассмешить Бога — расскажи ему свои планы на будущее
Вопрос по Remouting
От: Мартыненко Сергей Украина  
Дата: 08.09.06 07:01
Оценка:
Добрый день!

подскажите пожалуйста, есть ли возможность в каком либо Sink на стороне сервера получить имя класса и имя метода (свойства) к которому происходит обращение. На данный момент используется TCPChannel, BinaryServerFormatterSinkProvider и свой Sink который применяется до BinaryServerFormatterSinkProvider.
Re: Вопрос по Remouting
От: Igor Trofimov  
Дата: 08.09.06 07:09
Оценка:
МС>подскажите пожалуйста, есть ли возможность в каком либо Sink на стороне сервера получить имя класса и имя метода (свойства) к которому происходит обращение.

Конечно. Если почему-то не получается в канальном Sink это сделать, то можно сделать в контекстном Sink. Главное — получить распакованный IMessage, в нем — все есть.
Re[2]: Вопрос по Remouting
От: Мартыненко Сергей Украина  
Дата: 08.09.06 07:21
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

iT>Конечно. Если почему-то не получается в канальном Sink это сделать, то можно сделать в контекстном Sink. Главное — получить распакованный IMessage, в нем — все есть.


Вы не могли бы подсказать как можно получить Message, Я смотрел в отладчике, но в метод ProcessMeesage приходит null. Возможно я что то не так сделал. У меня есть Sink в котором реализовал простейшую авторизацию подключаемого пользователя. Но теперь возникла необходимость давать или нет доступ (в зависимости от полномочий пользователя) к определенным методам. так вот в методе ProcessMessage моего Sink параметр requestMessage равен null. Sink наследуетс следующие класы и интерфейсы BaseChannelObjectWithProperties, IServerChannelSink и получает управление до BinaryServerFormatterSinkProvider
Re[3]: Вопрос по Remouting
От: Igor Trofimov  
Дата: 08.09.06 07:34
Оценка:
Я так понял, вы определили канальный приемник, который работает до серверного форматировщика (FormatterSink).
Его задача — преобразовывать поток байт в граф объектов (IMessage).
Так что не удивительно, что готового IMessage у вас в вашем приемнике (sink) еще нету.
Или переопределите серверный форматировщик и найдите способ обратиться к стандартному форматировщику, а затем обработать полученный IMessage, или вставляйте свой приемник ПОСЛЕ стандартного форматировщика, когда IMessage уже сформирован. Это, например, серверный контекстный приемник.

Более того, это даже правильнее концептуально, потому что каналы у вас могут быть разными (TCP, UDP, что-то еще), а авторизация нужна по-любому. Логично вынести этот сервиcный слой из канала в контекст сервера.
Ну, правда, придется тогда ваши серверные объекты делать CBO. Впрочем, это не так страшно, зато очень полезно
Re[4]: Вопрос по Remouting
От: Мартыненко Сергей Украина  
Дата: 08.09.06 14:20
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

iT>Я так понял, вы определили канальный приемник, который работает до серверного форматировщика (FormatterSink).

iT>Его задача — преобразовывать поток байт в граф объектов (IMessage).
iT>Так что не удивительно, что готового IMessage у вас в вашем приемнике (sink) еще нету.
iT>Или переопределите серверный форматировщик и найдите способ обратиться к стандартному форматировщику, а затем обработать полученный IMessage, или вставляйте свой приемник ПОСЛЕ стандартного форматировщика, когда IMessage уже сформирован. Это, например, серверный контекстный приемник.

iT>Более того, это даже правильнее концептуально, потому что каналы у вас могут быть разными (TCP, UDP, что-то еще), а авторизация нужна по-любому. Логично вынести этот сервиcный слой из канала в контекст сервера.

iT>Ну, правда, придется тогда ваши серверные объекты делать CBO. Впрочем, это не так страшно, зато очень полезно

Спасибо вроде то что нужно. Но тут у меня возник вопрос, в книжке (Microsoft NET Remoting) описан только один метод подключения IMessageSink — через атрибуты, а есть ли другой способ (в ручную так сказать) или как можно получить доступ к установленным MessageSink?
Re[5]: Вопрос по Remouting
От: Igor Trofimov  
Дата: 08.09.06 15:41
Оценка:
МС>Спасибо вроде то что нужно. Но тут у меня возник вопрос, в книжке (Microsoft NET Remoting) описан только один метод подключения IMessageSink — через атрибуты, а есть ли другой способ (в ручную так сказать) или как можно получить доступ к установленным MessageSink?

Смотря к каким и куда
Канальные синки через конфиг ставятся.
Синки для контекста можно задать через свойства контекста программно, при создании контекста.
Динамические приемники вообще в любой момент добавляются/убираются, но они меньше возможностей дают.
Re[6]: Вопрос по Remouting
От: Мартыненко Сергей Украина  
Дата: 11.09.06 07:18
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

iT>Смотря к каким и куда

iT>Канальные синки через конфиг ставятся.
iT>Синки для контекста можно задать через свойства контекста программно, при создании контекста.
iT>Динамические приемники вообще в любой момент добавляются/убираются, но они меньше возможностей дают.

Канальные синки я создавал следующим образом

BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();
TcpServerChannel channel = new TcpServerChannel(title, port, provider);
ChannelServices.RegisterChannel(channel, false);


интересует есть ли подобный механизм для MessageSink и если есть то где его можно найти
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.