2010-09-25 4 views

ответ

6

Асинхронный вызов от клиента так же, как любая асинхронная операция ohter в .NET Framework. Когда вы выполняете вызов синхронизации из потока в службу WCF, поток будет зависать. Это означает, что нить не сможет выполнять какую-либо другую работу, пока вызов службы не вернет ответ или исключение. В отличие от этого асинхронный вызов будет запускаться в отдельном потоке (созданном фреймворком), так что ваш основной поток сможет продолжить работу, и он будет уведомлен о завершении асинхронного вызова путем обратного вызова (события).

Предположим, что у вас есть приложение WinForms в качестве WCF-клиента, и вы хотите вызвать службу WCF. Если вы сделаете вызов синхронизации, который займет несколько секунд, чтобы завершить ваше приложение, он будет зависать для этого времени обработки = пользователь не сможет ничего делать с приложением (только убейте его от диспетчера задач). Но если вы используете асинхронный вызов, он будет полностью интерактивным, так как операция async будет обрабатываться фоновым потоком. Таким образом, асинхронные операции подходят для интерактивных решений или если вам нужно выполнять несколько операций параллельно.

Например, проверьте это How to article с MSDN.

Просто для полноты я описал разницу между синхронизацией и асинхронными вызовами = синхронная и асинхронная обработка на клиенте. WCF также поддерживает синхронные и асинхронные операции = синхронная и асинхронная обработка на сервере.

3

WCF поддерживает асинхронную поддержку. Возможны различные сценарии использования асинхронных вызовов.

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

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

Получите хорошее представление по адресу: http://www.codeproject.com/KB/WCF/WCFConcurrency.aspx

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