如何隐藏预期异常的WCF故障状态消息框?

如何隐藏预期异常的WCF故障状态消息框?,wcf,service,exception-handling,messagebox,Wcf,Service,Exception Handling,Messagebox,我有一个支持多种设备类型的应用程序。支持的设备之一需要WCF服务才能连接到它 我有一个线程不断地检查服务,如果找到它,它可以继续调用必要的代码来尝试连接到设备。。。如果服务正在运行,这一切都可以正常工作 但是,对于服务未运行或不可用的情况(用户甚至可能不使用该设备),将抛出EndpointNotFoundException。我希望这个异常会发生,我正在尝试/捕捉它。但是,我仍然会弹出一条错误消息,提示“通信对象System.ServiceModel.Channels.ServiceChannel

我有一个支持多种设备类型的应用程序。支持的设备之一需要WCF服务才能连接到它

我有一个线程不断地检查服务,如果找到它,它可以继续调用必要的代码来尝试连接到设备。。。如果服务正在运行,这一切都可以正常工作

但是,对于服务未运行或不可用的情况(用户甚至可能不使用该设备),将抛出EndpointNotFoundException。我希望这个异常会发生,我正在尝试/捕捉它。但是,我仍然会弹出一条错误消息,提示“通信对象System.ServiceModel.Channels.ServiceChannel无法用于通信,因为它处于故障状态”。如何隐藏/禁用此错误框

protected override void OnTimerCallback(object state)
{
    ServiceClient proxy = new ServiceClient("NetNamedPipeBinding_IService");

    try
    {
        proxy.Open();

        // do some stuff here...

        proxy.Close();
     }
     catch (EndpointNotFoundException)
     {
        // just ignore, expected if service isn't running
     }
     catch (CommunicationObjectFaultedException)
     {
        // just ignore, expected if service isn't running 
     }
}

顺便问一下,我正在使用.NET3.5。你用谷歌搜索过这个吗? 我认为当您尝试使用代理时,处于故障状态的客户端通道不会抛出CommunicationObjectFaultedException。您需要检查客户端是否处于故障状态


检查被接受的答案

是的,我已经在谷歌上广泛搜索过了。。。我可以在启动应用程序时立即显示此错误消息,而无需创建客户端实例或进行任何服务调用。(基本上,我附加的代码被注释掉了,当服务没有运行时,错误消息仍然出现)即使客户端处于故障状态,我也不能接受这一点,因为这意味着服务没有运行(在某些情况下这是正常的),然后继续,但不要让恼人的消息不断弹出吗?:)我认为我没有足够的信息进行进一步的推测;如果您看到一个messagebox弹出,甚至没有创建客户机实例或进行服务调用,那么听起来我们甚至还不了解它的来源。您最初的解释对我来说更有意义—首先看到EndpointNotFoundException,然后看到出现故障的通道。是否有其他WCF服务从其他代码区域连接到?这是一个未处理的异常对话框吗?至于您的第二条评论,您不能将出现故障的频道视为服务未运行。通道可能因其他原因出现故障。在您的应用程序范围内,如果您希望保持简单,您可以以相同的方式处理这种情况,但我必须让您回到我提供的链接-您需要在使用它之前检查通道的“状态”(通道是指代理或客户端,具体取决于哪种编码技术-在您的情况下,似乎是代理)