.net - WCF ExceptionShielding 错误 ID 与传递给处理程序的 HandlingInstanceId 不匹配

标签 .net wcf exception enterprise-library fault

我的服务有以下装饰

<ExceptionShielding("MyExceptionPolicyName")>

当抛出错误异常时,我的策略会发现错误并正常登录。它获取处理实例 ID 并将其与错误一起记录以供引用。我注意到,故障“Error ID:”中返回的 Guid 与传递到处理实例 ID 中的 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

最佳答案

根据http://msdn.microsoft.com/en-us/library/ff649012.aspx :

您还可以指定“{Guid}”源以将当前处理实例 ID 添加到故障契约属性。

在您的 .config 文件中:

<mappings>
    <add source="{Guid}" name="HandlingInstanceId" />
</mappings>

在您的 ValidationFault 故障合约中:

[DataMember]
public Guid HandlingInstanceId { get; set; }

注意:“{Guid}”源似乎是处理实例 ID 的特殊标记。

另请参阅:http://entlib.codeplex.com/discussions/232049

最后 2 个条目: http://entlib.codeplex.com/discussions/243558

关于.net - WCF ExceptionShielding 错误 ID 与传递给处理程序的 HandlingInstanceId 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15913197/

相关文章:

c# - 从 MHT 文档中提取内容

.net - 嵌入式 IronPython 内存泄漏

c# - 从 ASP.NET 4.5 应用程序使用需要 WS-Security 的 Web 服务

java - 在 Java 中分割字符串并以随机顺序连接各部分

c# - 如何确定我的程序集是否可以被 Mono、MonoTouch、MonoDroid 使用?

WCF - 什么是最快的绑定(bind)?

wcf - WCF 服务中的大文件

java - 按名称的对象和方法

c# - Xamarin.iOS 版本 Appstore 应用程序中的人类可读异常处理

c# - 计时器、UI 框架和不良耦合——有什么想法吗?