我有大量的遗留代码,现在它是一个WCF REST服务的后端 - 如果这很重要的话,它以前是一个通常的WCF服务后端。我想实现一种机制,可以捕获任何方法中的任何异常并分析它。如果发现是已知错误,则将其处理并转换为友好的故障。
我知道我可以抛出
我试图添加一个终结点行为扩展,创建一个新的行为,覆盖标准的
我期望这个机制返回任何已知异常的自定义数据,但我错了。微软非常友好地实现了一个不可避免的
问题是,我是否走在正确的道路上,并且是否有一种方法可以在WCF REST机制中禁用此处理程序,或者引入一个新的异常(例如,当捕获任何异常时,它首先由我的处理程序处理,如果它们抛出/返回,例如,FaultException,则将此新异常提供给
非常感谢!
我知道我可以抛出
FaultException
或WebProtocolException
而不是“通常”的异常,但是在代码中所有地方都抛出异常,并查找所有异常是非常痛苦的选项。我试图添加一个终结点行为扩展,创建一个新的行为,覆盖标准的
WebHttpBehavior.AddServerErrorHandlers
方法,并将我的错误处理程序(IErrorHandler
实现)添加到终结点调度程序错误处理程序集合中。在错误处理程序中,我分析异常并根据此异常创建(或不创建)所需的故障。我期望这个机制返回任何已知异常的自定义数据,但我错了。微软非常友好地实现了一个不可避免的
WebHttpBehavior2
,它无条件地将内部的Microsoft.ServiceModel.Web.WebErrorHandler
添加到终结点调度程序错误处理程序集合的末尾。该处理程序忽略所有先前执行的处理程序,并仅识别一小部分异常,而大多数异常被解释为“内部服务器错误”,仅此而已。问题是,我是否走在正确的道路上,并且是否有一种方法可以在WCF REST机制中禁用此处理程序,或者引入一个新的异常(例如,当捕获任何异常时,它首先由我的处理程序处理,如果它们抛出/返回,例如,FaultException,则将此新异常提供给
Microsoft.ServiceModel.Web.WebErrorHandler
,而不是原始异常)。如果我所有关于IErrorHandler
和行为扩展的实验都是无用的,那么有什么其他的选择?再次强调,我真的不想修改异常抛出逻辑,只想有一个地方来捕获异常并处理它们。非常感谢!