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
是在同一个线程上,所以上下文是可用的。第二次调用在不同的线程上,因此上下文不可用。