Я работаю над приложением 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;
}