Как управлять ошибочным поведением, когда служба неожиданно остановлена

Я застрял в проблеме, которую не могу объяснить, когда служба неожиданно останавливается. Канал вызывает исключение CommunicationException, но не вызывает событие Faults.

Здесь контекст:

1 - Я объявляю свой клиентский канал и его метод отключения:

public class MyProxy : RealProxy, IDisposable
{
    private IMyService _client;
...

    private void Disconnect(object obj, Exception reason)
    {
        _client = null;
    }
}

2 - Я создаю канал и подписываю свой метод Disconnect на обработчик событий Faults:

        var factory = new ChannelFactory<TContract>(ep);
        factory.Faulted += (sender, e) => Disconnect(sender);

        _client = (IMyService)factory.CreateChannel();
        ((IClientChannel)_client).Faulted += (sender, e) => Disconnect(sender);

3 - я называю мой метод обслуживания:

    try
    {
            using (new OperationContextScope((IContextChannel)channel))
            {
                var res = mcm.MethodBase.Invoke(channel, args);
            }
        }
        return;
    }
    catch (Exception error)
    {
        return;
    }

4 - я останавливаю отладчик в сервисном методе, называемом реализацией, и останавливаю свой сервис для симуляции поломки. Затем он создает исключение CommunicationException "Конечная точка не найдена...", но не изменяет состояние канала на Failed. Так что мой метод Disconnect никогда не вызывается...

Кто-нибудь знает почему?

0 ответов

Другие вопросы по тегам