WCF ExceptionShielding错误ID不匹配与handlingInstanceId传递给处理程序

我有以下服务装饰

<ExceptionShielding("MyExceptionPolicyName")> 

当一个错误exception被抛出时,我的策略会检测到错误并且很好地login。 它采用handlingInstance Id并将其与错误一起logging以供参考。 我注意到的是,在错误中返回的Guid“Error ID:”与传入处理instanceId的错误不同。

我也试图装饰这样的操作

 <FaultContract(GetType(ValidationFault))> 

但是这会产生相同的结果。

我想要做的是如何捕捉到“错误ID:”传回给消费者,所以我可以logging它与例外。 *补充信息:exception策略处理程序是一个自定义exception,它将各种属性和数据logging到特定的exception日志数据库模式中。

任何人都知道如何做到这一点?

更新:每@ Jay Patel的评论,我把这个添加到我的configuration启用跟踪

 <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> 

然后,我执行了一个请求来获得由exception屏蔽屏蔽的故障响应。 错误响应string格式如下:“使用此服务时发生错误,请与您的pipe理员联系以获取更多信息。错误ID:{GUID}”

然后我查看了跟踪日志,发现没有任何证据的GUID或这个string。

在使用ExceptionShielding时,任何关心查看其示例的人都可以通过tracelog链接到这个tracelog。

UPDATE2:

再次,根据@Jay Patel的评论,补充说。 我为maxMessageLog尝试了-1和max int值,以确保获得该日志中的最大数据量。

 <diagnostics> <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="2147483647" /> </diagnostics> 

日志没有帮助。 它甚至不包括任何关于回答我的问题的事情。

为了澄清的情况下,不清楚上面…我希望能够在消息中的“错误ID:”后面捕获的GUID回到客户端,所以我可以loggingexception处理程序logging的exception。 通过这种方式,客户端可以联系“pipe理员”,就像错误ID所示,并且实际上能够find某些东西。

这里是完整的跟踪启用pastbin

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

您也可以指定一个“{Guid}”来源将当前的处理实例ID添加到Fault Contract属性中。

在您的.config文件中:

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

在您的ValidationFault FaultContract中:

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

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

另见: http : //entlib.codeplex.com/discussions/232049

最后2项: http : //entlib.codeplex.com/discussions/243558

消息日志会有帮助吗? 如果是的话,我想你的configuration需要这样的东西:

 <source name ="System.ServiceModel.MessageLogging" switchValue="Verbose, ActivityTracing"> <listeners> <add name="xml" /> </listeners> 

请注意,此处的源名称是“System.ServiceModel.MessageLogging”,而不是“System.ServiceModel”。

有关完整的示例,请参阅此文章: http : //msdn.microsoft.com/en-us/library/dd788183.aspx

希望这会帮助你。