如何在意外停止服务时管理出现故障的行为

时间:2013-02-28 18:02:39

标签: wcf faulted

我遇到了一个问题,当服务意外停止时我无法解释。该频道会抛出一个CommunicationException,但不会引发Faulted事件。

这里是上下文:

1 - 我声明了我的客户端频道和他的断开连接方法:

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

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

2 - 我创建了频道并将我的Disconnect方法订阅到Faulted事件处理程序:

        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 - 我在名为implementation的服务方法中停止调试器,我停止服务以模拟故障。然后抛出一个CommunicationException“Endpoint not found ...”但不要将通道状态更改为Faulted。所以我的Disconnect方法永远不会被调用......

有谁知道为什么?

0 个答案:

没有答案