WebOperationContext доступен в статической функции? - PullRequest
1 голос
/ 04 ноября 2011

У меня есть служба RESTful WCF, у которой есть метод службы, скажем, BeginX ()

Внутри BeginX я вызываю статическую функцию Validate в статическом вспомогательном классе.Могу ли я вызвать внутри статического метода Validate метод WebOperationContext.Current.OutgoingResponse.StatusCode = blah?

Каково ожидаемое поведение при вызове текущего контекста изнутри статических методов в моем сервисе?

(Я попытался создать прототип, но не могу получить WebOperationContext, когда пытаюсь получить его из встроенной службы WCF, которая работает в моем консольном приложении)

1 Ответ

2 голосов
/ 04 ноября 2011

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