如何处理WCF上的故障状态?(在Windows服务中托管)

Cha*_*bub 3 .net c# wcf event-handling

我正在托管WCF作为Widnows服务,但我遇到了处理WCF通道的故障状态的问题.ServiceHost上的故障事件永远不会升起.

托管申请:

protected override void OnStart(string[] args)
    {
        _serviceHost = new ServiceHost(typeof(WCF_FaultTest.Service1));
        _serviceHost.Faulted += _serviceHost_Faulted;
        _serviceHost.Open();
    }

    void _serviceHost_Faulted(object sender, EventArgs e)
    {
        // never raise up..
    }
Run Code Online (Sandbox Code Playgroud)

故障状态我尝试模拟这样:

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single)]
public class Service1 : IService1
{
    public string GetFault()
    {
        throw new Exception("Should went to fault..");
    }
Run Code Online (Sandbox Code Playgroud)

我正确使用它吗?谢谢.

Ern*_*ieL 5

您正在使用多个CommunicationObject.当您在服务实现中抛出异常时,通道出现故障,但主机却没有出现故障.在这种情况下,ServiceHost.Faulted事件不适用.

要记住的一件事是,一旦CommunicationObject进入故障状态,就不能再使用它了.出现故障的CommunicationObject唯一要处理的是关闭/中止.在您的服务抛出异常后,如果您创建新频道,您仍然可以调用该服务.因此,服务不会出现故障.

从体系结构的角度来看,服务主机事件不是实现错误处理的"正确"位置.通常,您希望错误处理成为服务配置的一部分.例如,ServiceHost事件中的错误处理不容易移动到IIS主机.你的评论听起来好像IErrorHandler不符合你的要求.你想要实施什么要求?