powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF подобраться к контракту
4 сообщений из 4, страница 1 из 1
WCF подобраться к контракту
    #37159189
Арнис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Начал вчитываться в WCF на примере из MSDN
http://msdn.microsoft.com/ru-RU/library/ms734712

Вроде все получается, дуплексный контракт тоже.
Но появился один интересный вопрос: можно ли, из Shared Sub Main к примеру ( http://msdn.microsoft.com/ru-ru/library/ms730935.aspx пример в конце страницы), попасть в экземпляр класса реализующий контакт?

Например: на сервере регистрируются N клиентов. Есть желание кого-то из клиентов грохнуть. Как это сделать?
...
Рейтинг: 0 / 0
WCF подобраться к контракту
    #37161980
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для дуплекса всегда SessionMode.Required, с помощью OperationContext.GetCallbackChannel несложно соорудить список клиентских "сессий", например, при регистрации клиента добавлять в этот список CallbackChannel и необходимую информацию о клиенте, SessionId, и проч. (ну а грохнуть - закрыть канал, например)

наверное, как-то можно добраться до клиентских "сессий" штатными средствами, не сооружая своей "городухи", не знаю, не разбирался (т.к. мне нужна была именно моя "городуха")
...
Рейтинг: 0 / 0
WCF подобраться к контракту
    #37162124
Арнис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно, если не секрет, взглянуть на Вашу "городуху"?
Может чем пригодится?
...
Рейтинг: 0 / 0
WCF подобраться к контракту
    #37162213
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Арнис,

сухой остаток схематично такой
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
    [ServiceContract(..., CallbackContract = typeof(IDuplexCallbackContract))]
    public interface IDuplexContract
    {
        [OperationContract(...)]
        void Login(Message message);
        [OperationContract(...)]
        void Call(Message message);
        ...
        [OperationContract(...)]
        void Logout(Message message);
    }

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
    public class DuplexService : IDuplexContract
    {
	Dictionary<string, IDuplexCallbackContract> clients ...
        ...
        public void Login(Message message) // регистрация клиента
        {
	   ...
           lock (((ICollection)clients).SyncRoot) {
		clients.Add(OperationContext.Current.Channel.SessionId, OperationContext.Current.GetCallbackChannel<IDuplexCallbackContract>());
           }
	   ...
        ...
        public void Call(Message message) // клиент дергает сервис
        {
           string sessionId = OperationContext.Current.Channel.SessionId;
	   IDuplexCallbackContract ch = null;
           lock (((ICollection)clients).SyncRoot) { // находим "сессию" клиента
                if (clients.ContainsKey(sessionId)) {
                    ch = clients[sessionId];
                }
           }
           if (ch != null) { // работаем с каналом клиента
	   ...
только в clients вместо IDuplexCallbackContract я засовываю класс-обертку (напихивая всякой дребеденью)
чтобы поддерживать актуальность списка, можно либо подписаться на OperationContext.Current.Channel.Closing/Faulted, либо периодически запускать "чистильщика дохлых сессий"
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF подобраться к контракту
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]