C# WebOperationContext.current和HttpContext.current之间的差异

C# WebOperationContext.current和HttpContext.current之间的差异,c#,asp.net,wcf-rest,C#,Asp.net,Wcf Rest,我为客户开发web和移动应用程序。在我当前的架构中,许多资源在web访问和移动访问之间共享。aspx页面可以在web上显示,并在移动应用程序中调用到web视图。我的问题是: WebOperationContext.Current和HttpContext.Current对象之间有什么区别 据我所知,它是同一个对象,但我注意到WebOperationContext.Current在某些情况下为空,我不明白为什么。WebOperationContext通常用于WCF REST方法,以便该方法可以访问传

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

WebOperationContext.Current
HttpContext.Current
对象之间有什么区别


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

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

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

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


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

旁注:和@tnw:这是我的第一个冲动,但我看不出两者之间的细微差别?我不知道是否应该单独问这个问题,但我想了解这些上下文与OperationContext之间的关系。如何解决这个问题。在我创建的新线程上获取当前对象。并将响应发送回原始线程,是否应该使用async Wait