WebOperationContext.current 和 HttpContext.Current 之间的区别

Posted

技术标签:

【中文标题】WebOperationContext.current 和 HttpContext.Current 之间的区别【英文标题】:Difference between WebOperationContext.current and HttpContext.Current 【发布时间】:2013-09-15 20:31:11 【问题描述】:

我为客户开发网络和移动应用程序。在我当前的架构中,许多资源在 Web 访问和移动访问之间共享。 aspx 页面可以在 Web 上显示并被调用到移动应用程序中的 Web 视图。我的问题是:

WebOperationContext.CurrentHttpContext.Current 对象有什么区别?

据我了解,它是同一个对象,但我注意到 WebOperationContext.Current 在某些情况下为空,我不明白为什么。

【问题讨论】:

旁注:WebOperationContext.Current Documentation 和 HttpContext.Current Documentation @tnw :那是我的第一个冲动,但我看不出两者之间的细微差别? 我不知道我是否应该将此作为一个单独的问题提出,但我想了解这些上下文与 OperationContext 的关系。 【参考方案1】:

WebOperationContext 通常用于 WCF REST 方法中,以便该方法可以访问传入请求和传出响应。

HttpContext 通常用于 ASMX Web 服务的 ASP.NET WebForms 页面或 Web 方法中,此时可以访问传入请求和传出响应。

它们是为不同的项目类型(WCF REST/ASP.NET WebForms)设计的,因此您不应在错误的项目类型中使用它们。

关于.Current 的值为null 时,那就更复杂了。即使您在正确的项目类型中调用此属性,您也需要确保调用是在正确的线程上进行的。只有在处理请求的线程(也发送响应)上,您才能访问当前上下文。在任何其他线程(后台线程或您创建的新线程)上,您会得到null。这已为人所知多年,但初学者有时仍会出错。

【讨论】:

如何解决这个问题。在我创建的新线程上获取当前对象。并将响应发送回原始线程,我应该使用异步等待

以上是关于WebOperationContext.current 和 HttpContext.Current 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章