我在我的服务上装饰了以下内容
<ExceptionShielding("MyExceptionPolicyName")>
当抛出错误异常时,我的策略可以成功捕获错误并将其记录下来。它会获取 handlingInstance Id 并将其与错误一起记录以进行参考。我注意到的是,在故障“Error ID:”中返回的 Guid 与传递给 handling 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 的评论,我尝试了 -1 和最大 int 值作为 maxMessageLog,以确保在该日志中获取最大数量的数据。
<diagnostics>
<messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="2147483647" />
</diagnostics>
日志没有帮助。它对于任何接近回答我的问题的事情都没有包含任何内容。
为了澄清,以防上面不够清楚...我想能够在返回到客户端的消息中捕获“错误ID:”后面的GUID,这样我就可以将其与异常处理程序记录的异常一起记录下来。这样,客户端就可以像消息所说的那样联系“管理员”并附带错误ID,实际上能够找到一些东西。
这是启用完整跟踪的pastbin