1

我正在开发一个使用一些第三方服务的 WCF 解决方案。大多数用户输入和操作都将由第三方服务验证,这意味着我的服务只有在收到第三方异常时才知道出现问题。

我需要设置一些东西来翻译并将此类异常传递给我自己的服务的调用者,因为原始异常的消息对于我的调用者来说太技术性了,尽管我确实希望他们知道出了什么问题。

我正在考虑的解决方案是使用 Microsoft 企业库异常处理,使用自定义处理程序,捕获第三方异常,并用更友好的消息(来自映射表或类似的)替换原始消息以及分配我的错误代码,然后抛出 SOAP 错误。第三方异常的完整列表是未知的,但我确实知道其中的大部分——对于未知的,我打算用通用消息和错误代码替换,并记录原始异常。

我认为这个解决方案会起作用,但可能有更好的方法,因此发布这个问题以寻求您的专业知识。请分享你的想法。我的主要目标是优雅地处理第三方异常(易于维护处理代码)和翻译消息(易于配置的翻译设置)。

4

1 回答 1

0

最后,我得到了以下解决方案。

(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 日志记录块中配置错误日志记录,如果配置,则会记录源错误,以及形成的新错误,以及使用的映射规则等。

这不是完美的解决方案,但它很适合我的需求,因此我在这里提供它,以防有人正在寻找类似需求的潜在解决方案。

于 2015-04-29T02:06:13.823 回答