1

我有一个 RESTful WCF 服务,它有一个服务方法,比如 BeginX()

在 BeginX 内部,我在一个静态帮助器类中调用我的静态 Validate 函数。在静态 Validate 方法中,我可以调用 WebOperationContext.Current.OutgoingResponse.StatusCode = blah 吗?

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

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

4

1 回答 1

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 为空

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

于 2011-11-03T23:27:55.853 回答