Событие пожара, когда клиент подключается к конечной точке, размещенной в WCF - PullRequest
12 голосов
/ 03 апреля 2009

Что мне делать, чтобы вызвать событие, когда новый клиент подключается к службе, размещенной в WCF?

РЕДАКТИРОВАТЬ: я ищу, чтобы получить событие, когда создается новый сеанс или новый канал создается для клиента. Например: для закрытия сессии я использую:

OperationContext.Current.Channel.Closed += new EventHandler( Channel_Closed );

так что я должен использовать для инициации сеанса?

Ответы [ 2 ]

5 голосов
/ 14 марта 2012

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

По сути, вы создаете класс, который реализует этот интерфейс, а затем добавляете его на хост службы. Если вы являетесь хостингом, это довольно просто:

public class MyHook : IChannelInitializer
{
  public void Initialize(IClientChannel channel)
  {
    // Do whatever.
  }
}

var host = new ServiceHost(typeof(MyService), MYBASEADDRESS);
host.AddServiceEndpoint(typeof(IMyService), new WSHttpBinding(), MYSERVICEADDRESS);
host.Open();

// There will be one per endpoint; you can enumerate them if needed etc.
var dispatcher = host.ChannelDispatchers[0] as ChannelDispatcher;
dispatcher.ChannelInitializers.Add(new MyHook());

Поскольку вы используете режим экземпляра для каждого сеанса, вы получите новый канал, созданный для каждого нового сеанса, при первом подключении клиента. Диспетчер каналов - это объект, который отвечает за захват вновь созданного канала и связывание его с конкретным экземпляром объекта службы (выполняет сопоставление адресов и т. Д.). Он будет запускать каждый из пользовательских инициализаторов на новом канале, прежде чем ваш сервис будет подключен к нему.

0 голосов
/ 03 апреля 2009

Зависит от вашей настройки - вы делаете разговоры "за звонок"? Тогда вы на самом деле не получите никакого сообщения «клиент теперь подключен» само по себе ...

Ведете ли вы сеансовые разговоры? В вашем классе «ServiceHost» есть два события «Открытие» и «Открыто», которые вы можете подключить, особенно если вы самостоятельно размещаете свою службу.

Чего именно вы хотите достичь, отлавливая это событие?

Марк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...