2013-05-17 3 views
4

Я строю службу отдыха WCF и это клиент. Я планирую, что клиент мало знает об услуге, только правильные URL-адреса для вызова методов и ожидаемых результатов.Как заставить службу WCF RESTful работать async?

Мой контракт обслуживание:

[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 завершены, поэтому я получаю только последний статус задачи на стороне клиента. Как реализовать работу asynchronos в этой ситуации?

Заранее благодарен!

+0

где вы используете асинхронный? – Cybermaxs

+0

Что значит? Я делаю вызов метода, и я хочу, чтобы он выполнял службу до завершения основной обработки метода. Разве это не означает асинхронную работу? –

ответ

1

Вы прочитали эту интересную маленькую статью? Tweaking WCF to build highly scalable async REST API и следующая статья, которая является очень хорошей и которая, мы надеемся, предоставит ответ, который вы пожелаете Fixing WCF to build highly scalable async REST API

+0

Статьи могут быть весьма полезными, спасибо! –

Смежные вопросы