WebOperationContext доступен в статической функции?
У меня есть служба RESTful WCF, у которой есть метод службы, скажем, BeginX()
Внутри BeginX я вызываю свою статическую функцию Validate в статическом вспомогательном классе. Могу ли я вызвать внутри статического метода Validate WebOperationContext.Current.OutgoingResponse.StatusCode = blah?
Каково ожидаемое поведение, когда текущий контекст вызывается из статических методов в моем сервисе?
(Я попытался создать прототип, но не могу получить WebOperationContext, когда пытаюсь получить его из встроенной службы WCF, которая работает в моем консольном приложении)
1 ответ
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
находится в том же потоке, поэтому контекст доступен для него. Второй вызов находится в другом потоке, поэтому контекст недоступен.