Наилучшая практика с WCF ChannelFactory и тайм-аутом соединения

Я работаю над приложением winform, которое будет обращаться к службе WCF, размещенной как служба Windows. Я использую ChannelFactory вместо ссылки на службу. Мне удалось подключиться и вызвать службу WCF. Проблема в том, что я позволяю приложению бездействовать в течение 20 минут, а затем пытаюсь позвонить еще раз. Я получаю следующую ошибку:

«Соединение с сокетом было прервано. Это могло быть вызвано ошибкой при обработке вашего сообщения, или превышением времени ожидания приема на удаленном узле, или проблемой базового сетевого ресурса. Тайм-аут локального сокета был '00 : 00: 59.9489970 '. "

Я ищу лучшие методы управления подключением. В настоящее время я создал функцию PrepareWCFConnection (см. Ниже), которая проверяет состояние канала и ChannelFactory. Я вызываю этот метод перед вызовом служб WCF. Есть ли лучший способ справиться с этим?

     public bool PrepareWCFConnection()
    {
        if ((channelFactory == null) || 
            (channelFactory.State == CommunicationState.Faulted) ||
            (channelFactory.State != CommunicationState.Opened))
        {
            channelFactory = new ChannelFactory<IService1>(new NetTcpBinding(), endpointAddress);
        }


        if ((proxy == null) ||
            (((IClientChannel)proxy).State == CommunicationState.Faulted) ||
            (((IClientChannel)proxy).State != CommunicationState.Opened))
        {
            proxy = channelFactory.CreateChannel(endpointAddress);
            ((IClientChannel)proxy).Open();
        }

        return true;
    }
6
задан econner 16 December 2011 в 18:41
поделиться