2010-02-01 2 views
2

Несколько методов в моей службе WCF - это довольно длительное время - создание отчетов и отправка электронных писем.WCF - AsyncPattern = true или IsOneWay = true

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

Я в сомнении, по которому путь:

AsyncPattern = true OR 
IsOneWay=true 

Пожалуйста, руководство.

ответ

3

Возможно, это так.

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


Вы не должны сравнивать их, потому что они не сопоставимы.

Вкратце, AsyncPattern = True выполняет асинхронный вызов, независимо от того, возвращаете ли вы значение или нет.

OneWay работает только с использованием методов void и помещает блокировку в поток, ожидая, когда ресивер получит ответ.

+0

Благодарим за ответ. Не могли бы вы рассказать, что будет преимуществом AsyncPattern = true над IsOneWay = true? – iniki

+0

Okie ... ну, все методы обслуживания, на которых я хочу реализовать Asynch/One way, возвращают void. Насколько я понимаю, в IsOneWay поток не будет заблокирован для завершения всего процесса, пожалуйста, исправьте, если я ошибаюсь. Вы предлагаете мне повод для использования AsyncPattern = True здесь. Спасибо! – iniki

+0

IsOneWay блокирует вашу нить. Единственное различие заключается в том, что он не дожидается завершения всей операции на стороне сервера. Он ожидает, пока серверная сторона не подтвердит, что он получил все сообщение. –

0

Я знаю, что это старый пост, но IMO в вашем сценарии вы должны использовать IsOneWay на том основании, что вам все равно, что такое результат сервера. В зависимости от того, нужно ли вам в конечном итоге уведомлять клиента (например, о завершении или сбое задания сервера), вам также может потребоваться изменить интерфейс для использования SessionMode =, а затем использовать двустороннюю привязку.

Даже если вы действительно хотели использовать асинхронный 2-двустороннюю связь, потому что ваш клиент DID заботиться о результате, существуют различные понятия:

  • AsyncPattern = Истинные на сервере - вы могли бы сделать это для того, чтобы освободить ресурсы сервера, например если базовый ресурс (? SSRS для отчетности, Mail API и т. д.) поддерживает асинхронные операции. Но это принесет пользу серверу, а не клиенту.
  • На клиенте вы всегда можете генерировать свой служебный прокси-сервер с типом «Генерировать асинхронные операции» - в этом случае ваш клиент не будет блокироваться, и обратный вызов будет использоваться, когда операция будет завершена.
Смежные вопросы