我有一个RESTful WCF服务,其服务方法是说BeginX()
在BeginX中,我在静态助手类中调用静态Validate函数。在静态Validate方法中,我可以调用WebOperationContext.Current.OutgoingResponse.StatusCode = blah?
在我的服务中从静态方法内部调用当前上下文时的预期行为是什么?
(我尝试了原型设计,但是当我尝试从我的控制台应用程序中运行的进程内WCF服务中获取它时,我似乎无法获得WebOperationContext)
答案 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
的第一次调用是在同一个线程上,因此可以使用上下文。
第二个调用是在另一个线程上,因此上下文不可用。