Дуплексные обратные вызовы или многопоточность на стороне клиента для отзывчивых клиентов WCF - PullRequest
4 голосов
/ 12 января 2009

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

  1. Используйте дуплексный канал и просто используйте обратные вызовы для обновления пользовательского интерфейса при получении данных.
  2. Используйте отдельный поток для вызова службы и просто используйте операции запрос-ответ, а затем обновляйте поток пользовательского интерфейса при возврате данных.

Какое решение лучше, особенно когда предпочтение отдается функциональной совместимости, но не является строго необходимым, и, на ваш взгляд, какое решение быстрее (и чище) внедрить и поддерживать?

Ответы [ 2 ]

5 голосов
/ 12 января 2009

Если вы реализуете контракты обратного вызова, тогда вы устраняете необходимость для клиента реализовывать многопоточный код. Это может не быть существенным преимуществом при работе с клиентами .Net (поскольку VS автоматически генерирует асинхронный прокси-код для вас), хотя может оказаться полезным при работе с клиентами других платформ / языков.

Какой из них чище? Ну, это зависит от того, являетесь ли вы разработчиком клиента или сервера. Если, как я подозреваю в вашем случае, вы оба, и вы можете просто использовать .Net для клиента и сервера, то я бы, вероятно, соблазнился пока избегать обратных вызовов. Если бы вы подразумевали, что служба звонит, где требуется 45 секунд, то я бы сказала, что отозваны контракты, это действительно субъективно, но если бы мне пришлось высовываться, то я бы сказала, что если ответы займут больше 5 секунд тогда пришло время перейти к обратным вызовам.

0 голосов
/ 12 января 2009

Вы должны реализовать CallBackcontract .

Вот пример .

...