我在我的服务上装饰了以下内容
<ExceptionShielding("MyExceptionPolicyName")>
当抛出错误异常时,我的策略会发现错误并正常登录。它采用 handlingInstance Id 并将其与错误一起记录以供参考。我注意到的是,故障“错误 ID:”中返回的 Guid 与传递给处理 instanceId 的 Guid 不同。
我也尝试过像这样装饰操作
<FaultContract(GetType(ValidationFault))>
但这会产生相同的结果。
我想做的是如何捕获“错误 ID:”传递回消费者,以便我可以将其与异常一起记录。*附加信息:异常策略处理程序是一种自定义处理程序,它接受异常,并将其各种属性和数据记录到特定的异常日志数据库模式中。
有谁知道如何做到这一点?
更新: 根据@Jay Patel 的评论,我将此添加到我的配置中以启用跟踪
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\Temp\Traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
然后我执行了一个请求,以获取由异常屏蔽屏蔽的故障响应。故障响应字符串的格式如下:“使用此服务时发生错误。有关详细信息,请联系您的管理员。错误 ID:{GUID}”
然后我查看了跟踪日志,没有发现 GUID 或这个字符串的证据。
这是跟踪日志的pastebin链接,供任何想在使用 ExceptionShielding 时查看示例的人使用。
更新2:
同样,根据@Jay Patel 的评论,添加了这个。我为 maxMessageLog 尝试了 -1 和 max int 值,以确保我在该日志中获得最大量的数据。
<diagnostics>
<messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="2147483647" />
</diagnostics>
日志没有帮助。它甚至不包括任何接近回答我的问题的内容。
澄清一下,以防上面不清楚......我希望能够在返回给客户端的消息中的“错误 ID:”之后捕获 GUID,以便我可以使用异常处理程序记录的异常记录它。通过这种方式,客户可以联系“管理员”,如消息中的错误 ID 所示,并且实际上能够找到一些东西。
这是启用了完整跟踪的Pastbin