如何正确关闭通道工厂?

时间:2012-09-17 13:32:54

标签: c# wcf channelfactory servicehost

我想知道如何正确关闭channelFactory。实际上,我正在使用:

try
{
   factory.Close(TimeSpan.FromSeconds(0.25))
}
catch
{
   factory.Abort();
}

但是对于ServiceHost方面,未处理的异常到达域级别(应用程序的顶级)。 我不明白为什么服务主机不捕获异常并使用我配置的IErrorHandler处理它。

这是我配置ErrorHandler的方式:

IErrorHandler handler = new ErrorHandler();
foreach (var channelDispatcher in host.ChannelDispatchers.Select(d => d as ChannelDispatcher).Where(d => d != null))
{
    channelDispatcher.ErrorHandlers.Add(handler);
}

1 个答案:

答案 0 :(得分:0)

在调用Abort()之前,您应该检查您的工厂是否为空:

try
{
    factory.Close(TimeSpan.FromSeconds(0.25))
}
catch
{
    if (factory != null)
    {
        factory.Abort();
    }
    throw;
}