【问题标题】:WCF Current Context is NullWCF 当前上下文为空
【发布时间】:2013-09-16 09:53:15
【问题描述】:

我实现了一个自定义 WCF 跟踪侦听器并将日志写入 CSV 文件。在自定义侦听器中,我正在尝试访问当前请求 Url。

var url =  HttpContext.Current != null ? 
           HttpContext.Current.Request.Url : 
           null;

大多数情况下这是可行的,但最终HttpContext.Current 变为null。这主要发生在ServiceLevelReceiveRequest 命中跟踪侦听器时。

这种行为有原因吗?

【问题讨论】:

标签: c# wcf logging


【解决方案1】:

这里写在Microsoft's pages

在 ASP.NET 兼容模式下托管 WCF 服务

尽管 WCF 模型旨在跨托管环境和传输保持一致的行为,但通常存在应用程序不需要这种程度的灵活性的情况。 WCF 的 ASP.NET 兼容模式适用于不需要在 IIS 之外托管或通过 HTTP 以外的协议进行通信但使用 ASP.NET Web 应用程序平台的所有功能的场景。

与默认的并行配置不同,WCF 托管基础结构拦截 WCF 消息并将它们路由到 HTTP 管道之外,在 ASP.NET 兼容模式下运行的 WCF 服务完全参与 ASP.NET HTTP 请求生命周期。在兼容模式下,WCF 服务通过 IHttpHandler 实现使用 HTTP 管道,类似于处理 ASPX 页面和 ASMX Web 服务请求的方式。因此,在以下 ASP.NET 功能方面,WCF 的行为与 ASMX 相同:

  • HttpContext:在 ASP.NET 兼容模式下运行的 WCF 服务可以 访问 Current 及其关联状态。

  • 基于文件的授权:在 ASP.NET 中运行的 WCF 服务 兼容模式可以通过附加文件系统访问来确保安全 控制列表 (ACL) 到服务的 .svc 文件。

  • 可配置的 URL 授权:ASP.NET 的 URL 授权规则是 当 WCF 服务在 ASP.NET 中运行时对 WCF 请求强制执行 兼容模式。

  • HttpModuleCollection 可扩展性:因为 WCF 服务运行在 ASP.NET 兼容模式全面参与 ASP.NET HTTP 请求生命周期,在 HTTP 管道中配置的任何 HTTP 模块都是 能够在服务之前和之后对 WCF 请求进行操作

  • ASP.NET 模拟:WCF 服务使用当前身份运行 ASP.NET 模拟线程,它可能与 IIS 不同 如果 ASP.NET 模拟已为 应用。如果 ASP.NET 模拟和 WCF 模拟都是 为特定的服务操作启用,该服务 实现最终使用从 WCF 获得的身份运行。

通过以下配置(位于应用程序的 Web.config 文件中)在应用程序级别启用 WCF 的 ASP.NET 兼容模式:

  <system.serviceModel>        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />    </system.serviceModel>

【讨论】:

  • 您好 Zaheer Ahmed,该服务正在 ASP.NET 兼容模式下运行。但是,如上所述,上下文仅在某些情况下为空(主要是在“ServiceLevelReceiveRequest”日志命中期间)。谢谢你的回复。
【解决方案2】:

在 WCF 服务中,HttpContext.Current 不是始终为空吗?我相信你会想要使用 OperationContext.Current intsead。

【讨论】:

  • 如果服务在 ASP.NET 兼容模式下托管,那么我们可以访问 HttpContext.Current "HttpContext:在 ASP.NET 兼容模式下运行的 WCF 服务可以访问 Current 及其关联状态。"来自 MSDN (msdn.microsoft.com/en-us/library/aa702682.aspx)
  • 知道了。如果 OperationContext 为您提供所需的东西,您为什么要这样做?
  • HttpContext 和 OperationContext 都不可用。正如我在问题中所说,这最终会发生。并非一直如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
相关资源
最近更新 更多