Подтвердить что ты не робот

Событие Fire, когда клиент подключается к конечной точке WCF

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

EDIT: Я ищу, чтобы получить событие при создании нового сеанса или создание нового канала для клиента. Например: для закрытия сеанса я использую:

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

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

4b9b3361

Ответ 1

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

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

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());

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

Ответ 2

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

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

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

Марк