Правильный способ эффективного закрытия каналов WCF 4
Я использую следующие способы закрыть 4 канала WCF. Это правильный способ сделать это?
using (IService channel
= CustomChannelFactory<IService>.CreateConfigurationChannel())
{
channel.Open();
//do stuff
}// channels disposes off??
2 ответа
Хотя не строго направлено на канал, вы можете сделать:
ChannelFactory<IMyService> channelFactory = null;
try
{
channelFactory =
new ChannelFactory<IMyService>();
channelFactory.Open();
// Do work...
channelFactory.Close();
}
catch (CommunicationException)
{
if (channelFactory != null)
{
channelFactory.Abort();
}
}
catch (TimeoutException)
{
if (channelFactory != null)
{
channelFactory.Abort();
}
}
catch (Exception)
{
if (channelFactory != null)
{
channelFactory.Abort();
}
throw;
}
Раньше это был общепринятый способ выпуска клиентских прокси WCF в "ранние" дни WCF.
Однако с тех пор все изменилось. Оказалось, что реализация IClientChannel
Поэтому не стоит вызывать Close()
в пределах catch
блок, так как это может оставить некоторые неизданные ресурсы в случае исключения.
Новый рекомендуемый способ - вызывать IClientChannelcatch
блок вместо, в случае Close()
потерпит неудачу Вот пример:
try
{
channel.DoSomething();
channel.Close();
}
catch
{
channel.Abort();
throw;
}
Обновить:
Вот ссылка на статью MSDN, которая описывает эту рекомендацию.