我遇到了一个问题,当服务意外停止时我无法解释。该频道会抛出一个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方法永远不会被调用......
有谁知道为什么?