Вызов асинхронной веб-службы из веб-клиента asp.net 2.0 в веб-службу WCF (проблема асинхронности) - PullRequest
1 голос
/ 03 августа 2009

Я пытаюсь выполнить асинхронный вызов веб-службы из веб-клиента asp.net 2.0 в веб-службу WCF. Я создал прокси-класс, используя svcutil.exe с опцией async. Вот пример кода клиента, вызывающего веб-сервис:

protected void Page_Load(object sender, EventArgs e)   
{   
  WSClient client = new WSClient();   
  AsyncCallback asyncCallback = new AsyncCallback(WebServiceCallback);   
  AsyncCallState asyncCallState = new AsyncCallState(client);   
  client.BeginWS(value, asyncCallback, asyncCallState);   
  Response.Write("Big Test");   
}  

public void WebServiceCallback(IAsyncResult ar)   
{   
  AsyncCallState asyncCallState = (AsyncCallState)ar.AsyncState;   
  WSsClient client = (WSClient)asyncCallState.WebServiceState;   

  WSClientResult result = client.EndWS(ar);   
}  

Использование кода для справки; все в Page_Load будет выполнено, но на странице не будет отображаться «Большой тест» до тех пор, пока клиент не будет выполнен. EndWS будет выполнен в обратном вызове. Который не кажется асинхронным. Будем благодарны за любые идеи или предложения о том, как сделать асинхронный вызов асинхронным.

Ответы [ 2 ]

2 голосов
/ 03 августа 2009

Это не проблема веб-службы. Вам нужно узнать, как работает ASP.NET.

В частности, см. Злой код: асинхронные страницы в ASP.NET 2.0 .

0 голосов
/ 14 октября 2009

Вам необходимо добавить асинхронную директиву на страницу! После того, как вы это сделали, вы можете использовать завершенный и асинхронный.

* 1003 например *

Затем вы подключаете событие к somemethodcompleted ({some eventhandler}), который вы должны найти в сгенерированном прокси.

Тогда вызовите somemethodasync. Скину задание.

Использование этого метода автоматически зачислит на страницу задачи для asp.net, что предотвратит завершение жизненного цикла страницы до возврата метода.

Надеюсь, это поможет

...