我使用.NET 4.5中的異步/等待模式來實現WCF中的某些服務方法。 示例服務:在WCF服務中使用異步/等待時第一次等待時,OperationContext.Current爲空
合同:
[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
點之後獲得操作上下文,而無需手動將其傳遞到堆棧上?
這是什麼意思序列化「任務」實例通過電線到客戶端? – Steven
使用異步/等待時,任務不會傳遞給客戶端。 Wcf理解爲無效返回方法。添加對此類服務的引用的客戶端將看到void DoSomething(); – mdonatas
這很有趣。不過,我不確定你是否真的想用這種方式來執行操作。由於某種原因,操作失敗時你會怎麼做?客戶認爲它成功成功。您最好將這些操作排列在某種事務隊列中。 – Steven