OperationContext.Current равен нулю после первого ожидания при использовании async / await в службе WCF.
Я использую шаблон async / await в .NET 4.5 для реализации некоторых методов обслуживания в WCF. Пример сервиса:
Контракт:
[ServiceContract(Namespace = "http://async.test/")]
public interface IAsyncTest
{
Task DoSomethingAsync();
}
Реализация:
MyAsyncService : IAsyncTest
{
public async Task DoSomethingAsync()
{
var context = OperationContext.Current; // context is present
await Task.Delay(10);
context = OperationContext.Current; // context is null
}
}
У меня проблема в том, что после первогоawait
OperationContext.Current
возвращаетсяnull
и я не могу получить доступOperationContext.Current.IncomingMessageHeaders
.
В этом простом примере это не проблема, так как я могу захватить контекст до того, какawait
, Но в реальном случаеOperationContext.Current
доступ осуществляется из глубины стека вызовов, и я действительно не хочу менять большое количество кода, просто чтобы передать контекст дальше.
Есть ли способ получить контекст операции послеawait
указать, не передавая его вниз по стеку вручную?