Log4net threadContext 与 IIS 中托管的 WCF 一起使用是不是安全?
Posted
技术标签:
【中文标题】Log4net threadContext 与 IIS 中托管的 WCF 一起使用是不是安全?【英文标题】:Is Log4net threadContext safe to use with WCF hosted in IIS?Log4net threadContext 与 IIS 中托管的 WCF 一起使用是否安全? 【发布时间】:2011-01-11 01:00:42 【问题描述】:我在几个地方读到 log4net threadContext 在 asp.net 场景中使用是不安全的。这里有几篇文章:
Log4Net, ThreadContext, and Global.asaxhttp://piers7.blogspot.com/2005/12/log4net-context-problems-with-aspnet.html
所以我的方案是我想在 IIS 中托管的 WCF 层中使用 threadContext。线程上下文会好吗?我认为“单一”的并发模式可以做到这一点。
【问题讨论】:
有什么理由使用 log4net 而不是 MS Enterprise Library Logging 块?这适用于 asp.net / IIS 托管的 WCF 服务,并且每一点都可配置。 【参考方案1】:由于 Log4net 是线程安全的,所以我认为不会有问题。
【讨论】:
但是 WCF 会在单线程中正确执行请求吗? asp.net 的问题在于,在某些情况下,请求可能会跳转到不同的线程,因此 log4net 中的 threadContext 将毫无用处。 @lemkept 在大多数情况下,当它到达您的代码时,WCF 将在单个线程上运行请求,因为正常情况是 WCF 仅调用您的一种方法来处理请求.但是,如果您对请求管道做任何事情,我不知道 WCF 将如何处理线程。 @PaulLemke 这是正确的,并且与我正在处理的应用程序的观察结果相匹配。因此,这可能不是正确的答案。【参考方案2】:我使用 log4net 线程上下文来记录在 asp.net 应用程序和 wcf 服务中遇到错误的用户的身份。我没有遇到任何问题。这不是一个确定的答案,但您始终可以将您的服务与日志框架分离并测试 log4net 和线程上下文。如果您遇到任何问题,请删除您的线程上下文逻辑或插入一个新的日志框架,对您的服务逻辑影响最小。
【讨论】:
【参考方案3】:我已经设置了一个 WCF 服务,托管在 IIS6 中,它使用 log4net 没有问题,无论并发模式如何。使用 threadContext 应该没有问题。
唯一需要注意的是,如果您将 log4net 设置从外部文件加载到 WCF 层,您可能必须在 IIS 中重新启动它才能获取更改。
【讨论】:
以上是关于Log4net threadContext 与 IIS 中托管的 WCF 一起使用是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章