Есть ли способ получить сообщение об ошибке при асинхронных вызовах WCF? - PullRequest
0 голосов
/ 16 января 2009

У меня есть служба WCF, которая работает на 100% в синхронном (блокирующем) режиме, и теперь мне нужно переделать вызов, чтобы он использовал асинхронный шаблон.

Служба использует аутентификацию и выполняет передачу фрагментированных файлов с клиента на сервер, поэтому я переработал ее, чтобы использовать асинхронный префикс «Begin» для начала вызова.

Теперь я проверяю ошибки, преднамеренно искажая учетные данные пользователя, что приводит к истечению времени ожидания каждой части файлового чанка, который он пытается передать, что занимает много времени. Проблема в том, что я не получаю никаких сообщений об ошибках и не вижу, как их получить, если не удается выполнить асинхронный вызов. Это приводит к тому, что некоторые очень большие файлы вообще не загружаются, но клиент не знает об этом, так как не выдается никаких исключений.

У меня отмечены флажки Отладка-> Исключения-> Все исключения CLR, чтобы увидеть, есть ли исключения, которые проглатываются, но все равно ничего.

Итак, в общем, как вы получаете сообщение об ошибке асинхронных вызовов в WCF?

Заранее спасибо,

Ryan

1 Ответ

1 голос
/ 16 января 2009

Сервер кэширует исключение для вас, и если вы вызовете метод завершения операции для вашего асинхронного вызова, он выбросит все возникшие исключения.

private void go_Click(object sender, EventArgs e)
{
    client.BeginDoMyStuff(myValue, new AsyncCallback(OnEndDoMyStuff), null);
}

public void OnEndDoMyStuff(IAsyncResult asyncResult)
{
    this.Invoke(new MethodInvoker(delegate() { 
        // This will throw if we have had an error
        client.EndDoMyStuff(asyncResult);
    }));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...