Dan*_*rbo 6 error-handling service wcf exception
我正在使用IErrorHandler在WCF中进行异常处理,现在我想记录异常,以及堆栈跟踪和导致异常的用户.
我能看到导致异常的用户的唯一方法是:
OperationContext.Current.IncomingMessageProperties.Security.ServiceSecurityContext.PrimaryIdentity
...但这似乎只在ProvideFault内部工作,而不是在HandleError内部.有没有办法让用户进入HandleError?我想使用HandleError而不是ProvideFault,因为它在后台线程上被调用并且用于错误记录,对吧?
IErrorHandler 的两个方法具有明确定义的职责:
HandleError在这里处理所有未捕获的异常 - 这就是为什么它是进行日志记录的最佳位置 - 这实际上是它的全部原因
ProvideFault 的任务是将 .NET 异常转换为可互操作的 SOAP 错误 - 或者完全忽略该异常
当然,从技术上讲,没有什么可以阻止您在该ProvideFault方法中进行日志记录 - 如果我必须寻找该功能,这不是我会去寻找该功能的地方。我倾向于遵循最不意外的原则 - 如果调用该方法ProvideFault,我只期望它提供FaultException<T>- 而不是做很多其他事情。
要访问服务的安全上下文,请使用以下代码片段:
ServiceSecurityContext secCtx = ServiceSecurityContext.Current;
if(secCtx.PrimaryIdentity != null)
{
// do something with primary identity
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3887 次 |
| 最近记录: |