Эквивалент инициализации / удаления в WCF

#.net #wcf

#.net #wcf

Вопрос:

ASP.Net MVC3

В моих базовых контроллерах я использую Initialize / Dispose методы для создания / удаления моего ADO.NET подключение.

WCF

Могу ли я что-то подобное в WCF? Я использую свой собственный ServiceHostFactory и было бы неплохо, если бы это было возможно с его помощью или пользовательским ServiceHost .

Ответ №1:

Я нашел решение. Пожалуйста, напишите, есть ли вариант получше.

а) Реализовать IDispatchMessageInspector в классе:

     public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
    {
        // creates a new database connection
        return SessionFactory.Create();
    }

    public void BeforeSendReply(ref Message reply, object correlationState)
    {
        // closes the connection
        var session = (Session) correlationState;
        if (session != null)
            session.Dispose();
    }
  

б) Добавьте его с помощью web.config или программно в ServiceHost :

         foreach (ChannelDispatcher chDisp in ChannelDispatchers)
        {
            foreach (EndpointDispatcher epDisp in chDisp.Endpoints)
            {
                epDisp.DispatchRuntime.MessageInspectors.Add(myMessageInspector);
            }
        }