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 является нулевым
1016 * Первый вызов
CheckWebOperationContext
находится в том же потоке, поэтому контекст доступен для него.Второй вызов находится в другом потоке, поэтому контекст недоступен.