我正在构建WCF休息服务,它是客户端。我计划,客户端对服务知之甚少,只是正确的URL来调用方法和预期结果。
我的服务合同是:
[WebInvoke(Method="POST", UriTemplate="/tasks")]
[OperationContract]
void SubmitTask(Transaction task);
[WebGet(UriTemplate = "/tasks/{taskId}")]
[OperationContract]
[XmlSerializerFormat]
Transaction GetTask(string taskId);
SubmitTask实现如下:
SubmitTask(Transaction task)
{
DoSomethingWithTask(task);
task.Status = "SomeStatus";
DoSomethingElseWithTaks(task);
task.Status = "SomeOtherStatus";
}
我对客户的期望:
ButtonClick()
{
SubmitTask(task);
while(true)
{
string status = Transaction GetTask(task.taskId).Status;
Textbox.Text+= status;
if(status==ok)
break;
Thread.Sleep(1000);
}
}
问题是 - GetTask不在服务端执行,而所有SubmitTask操作都已完成,因此我只获得客户端的最后一个任务状态。如何在这种情况下实现异步操作?
提前致谢!
答案 0 :(得分:2)
你读过这篇有趣的小文章吗? Tweaking WCF to build highly scalable async REST API以及以下非常好的文章,希望能提供您想要的答案Fixing WCF to build highly scalable async REST API