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

Другие вопросы по тегам