1

我有一个托管在 Windows 服务中的 WCF 服务库。我花了一整天的时间测试了许多场景并取得了很大的成功。但是,就像现在的应用程序一样,我遇到了未捕获异常的问题, my FaultException<ExceptionFault>,只是被 WCF 服务记录,然后消失了。ExceptionFault是一个简单的DataContract模型,只有三个字符串值和描述异常的数据。

WCF 服务使用计时器每 30 秒调用一次以下方法:

public int Process(bool isForced)
{
    try
    {
        var count = ProcessListings();
        return count;
    }
    catch (Exception ex)
    {
        _logger.ErrorWithCallStack("Error while processing listings. " + ex.GetType().Name + ": " + ex.Message, ex, ex.StackTrace);
        if (ex is SchedulerException)
        {
            throw new FaultException<ExceptionFault>(new ExceptionFault(ex), ex.Message);
        }
        throw;
    }
}

private static int ProcessListings()
{
    if (processCount % 3 == 0)
    {
        throw new SchedulerException("ProcessListings failed.");
    }
    return 0;
}

客户端是 WPF 应用程序中的视图模型。它有一个命令可以通过调用 WCF 代理的方法来覆盖计时器并强制Process执行。ProcessAsync当我使用它时,客户端会捕获FaultException<ExceptionFault>并正确显示对话。当服务本身执行该Process方法时,定时器的Elapsed事件之一,同样的异常被抛出(每三次),但虽然这个异常没有在任何地方处理,服务只是忽略它并在下次定时器触发时再次处理。

我知道定时器事件中的异常被吞没了,但在这种情况下,我根本不知道还能做什么。我在客户端处理四种未处理异常的情况,如果我将计时器移动到 Windows 服务中,并在那里捕获未处理的异常,它发生在哪里,我如何将它传达回 WPF 客户端?

4

0 回答 0