我有一个托管在 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 客户端?