最后,我得到了以下解决方案。
(1)在我自己的服务的服务访问层(我从那里调用第三方服务),每当收到来自第三方的异常或错误时,它就会被传递给一个共享的DLL,我的错误重写库.
(2) 库从基于 XML 的配置中查找此类异常或错误是否配置了映射(它尝试通过错误代码、消息、消息正则表达式等进行匹配)。下面是一个示例配置,它指示库将诸如“您对项目 ItemABCD 的请求无效,因为它已分配给另一个用户:User1234”之类的消息翻译为“无法将项目 ItemABCD 分配给您”之类的内容。错误代码项目 1。该库采用新的错误代码和消息形成一个新的故障,可以由我的业务逻辑层进一步处理。
<!-- Each block is the mapping for a certain source error -->
<ErrorMapping>
<sourceErrorCode></sourceErrorCode>
<sourceErrorMessage>Your request for item (\w{0,10}) is invalid, because it has been assigned to another user: (\w{0,10}).</sourceErrorMessage>
<NewErrorCode>Item1</NewErrorCode>
<NewErrorMessage>Item {0} cannot be assigned to you.</NewErrorMessage>
</ErrorMapping>
(3) 如果第三方开发了尚未映射的新异常或错误,则使用默认故障,并且可以在没有匹配映射时将源错误按原样传递给我的用户。
(4) 在主项目的Enterprise Library 日志记录块中配置错误日志记录,如果配置,则会记录源错误,以及形成的新错误,以及使用的映射规则等。
这不是完美的解决方案,但它很适合我的需求,因此我在这里提供它,以防有人正在寻找类似需求的潜在解决方案。