WebOperationContext是否在静态函数中可用?

时间:2011-11-03 22:11:34

标签: wcf rest weboperationcontext

我有一个RESTful WCF服务,其服务方法是说BeginX()

在BeginX中,我在静态助手类中调用静态Validate函数。在静态Validate方法中,我可以调用WebOperationContext.Current.OutgoingResponse.StatusCode = blah?

在我的服务中从静态方法内部调用当前上下文时的预期行为是什么?

(我尝试了原型设计,但是当我尝试从我的控制台应用程序中运行的进程内WCF服务中获取它时,我似乎无法获得WebOperationContext)

1 个答案:

答案 0 :(得分:2)

WebOperationContext.Current是一个静态属性,只要该方法在该线程上运行,就可用于任何方法,静态或其他方法。

private static void CheckWebOperationContext()
{
   Trace.WriteLine(string.Format("CheckWebOperationContext: {0}", WebOperationContext.Current == null ? "WebOperationContext is null" : "WebOperationContext is not null"));

}

[OperationContract]
[WebInvoke]
public void DemonstrateWebOperationContext()
{
    Trace.WriteLine(string.Format("GetPlayerStatus: {0}", WebOperationContext.Current == null ? "WebOperationContext is null" : "WebOperationContext is not null"));
    CheckWebOperationContext();
    // Now call the same function on a different thread
    Action act = () =>
        {
            CheckWebOperationContext();
        };
    var iAsyncResult = act.BeginInvoke(null, null);
    iAsyncResult.AsyncWaitHandle.WaitOne();
}

这将产生以下输出:

  

GetPlayerStatus:WebOperationContext不为空

     

CheckWebOperationContext:WebOperationContext不为空

     

CheckWebOperationContext:WebOperationContext为null

CheckWebOperationContext的第一次调用是在同一个线程上,因此可以使用上下文。 第二个调用是在另一个线程上,因此上下文不可用。