我在Windows服务中托管了一个WCF服务库。我花了一整天的时间测试了很多场景并取得了很大成功但是,正如应用程序现在一样,我遇到了未被捕获的异常问题,我的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客户端?