Создание отдельных обработчиков для разных пользователей - чат WCF - PullRequest
1 голос
/ 24 июня 2010

Я слежу за этой замечательной статьей , чтобы разобраться и понять чат, используя WCF. Логика заключается в том, что когда пользователь присоединяется к чату, для этого конкретного пользователя создается обработчик событий, который сохраняется в словаре.

        lock (syncObj)
        {
            if (!checkIfPersonExists(person.Name) && person != null)
            {
                this.person = person;
                chatters.Add(person, MyEventHandler);
                userAdded = true;
            }
        }

Таким образом, в службе хранятся несколько обработчиков для нескольких пользователей.

Мой вопрос такой -

Как служба идентифицирует целевого пользователя, когда сообщение отправляется только с помощью обработчика событий? Я не понимаю уникальности обработчиков событий, хранящихся для пользователей. Как работает

handler.BeginInvoke(this, e, new AsyncCallback(EndAsync),
                    null);

вызывает функцию на стороне клиента, которая реализовала интерфейс контракта дуплексного клиента для этих конкретных пользователей? Что делает их связанными? Сессии?

Примечание : я знаю, что это может быть трудно понять, не читая эту статью. Я старался изо всех сил, чтобы спросить об этом в общих чертах.

Привет

NLV

1 Ответ

1 голос
/ 19 июля 2010

Я думаю, вы спрашиваете, как сервис реагирует на клиента в пабе / субсервисе.Если это так, ответ заключается в том, что служба использует канал обратного вызова OperationContext.Current.GetCallbackChannel<IYourServiceContract>(), который предоставляется, когда клиент «подписывается».Если вы углубитесь в этот callbackChannel, вы увидите, что он поддерживает все необходимые данные для связи с клиентом.Если вы заметили, что в примере приложения, которое вы связали, автор получает это от объекта person, потому что он хочет сохранить его в массиве chatters.

callback = 
                 OperationContext.Current.GetCallbackChannel<IChatCallback>(); 

Вот статья, которую я написал, которая может немного упростить модель pub / sub для вас.http://www.codeproject.com/KB/WCF/wcfesb.aspx. Это не программа чата, но она может объяснить немного больше о том, как достигается связь через канал обратного вызова.

Если это не то, что вы спрашиваете ... уточните, пожалуйста.

...