Как применить шаблон Task Async и WCF ChannelFactory ‹TChannel›?

У нас есть надежный клиент WCF, созданный в 2008 году на .NET 3.5 (теперь перекомпилированный под .NET 4.0), который общается с нашей собственной службой WCF через привязку net.tcp. Надежный клиент использует ChannelFactory ‹IOurServiceInterface› () для создания прокси-сервера службы, через который мы в настоящее время выполняем синхронные вызовы службы. Мы получаем результат от каждого звонка; у нас нет односторонних звонков.

Мы переходим на .NET 4.5 / C # 5 и хотим сделать клиент асинхронным с помощью async / await / TAP. Как лучше всего сделать это таким образом, чтобы получить чистый код и хорошую производительность во время выполнения?

(Я просмотрел документацию MS по этому поводу, но в ней всегда говорится о запуске svcutil. Мы не используем svcutil; мы используем ChannelFactory напрямую. Также: документация MS для асинхронного вызова операций с использованием фабрики каналов в .NET 4.5 не изменилась со дня .NET 3.0. Кажется, ChannelFactory не принял новую асинхронность.)


person Andrew Webb    schedule 18.11.2012    source источник


Ответы (2)


Вы можете обернуть существующие конечные точки APM (_1 _ / _ 2_) в Task, готовые к TAP, используя _ 4_.

Вы можете найти мою запись Async WCF Today and Tomorrow полезно, в котором показано, как использовать TAP с svcutil до VS2012.

person Stephen Cleary    schedule 18.11.2012
comment
Спасибо, Стивен. После поиска информации на основе вашего ответа и после прочтения вашего сообщения я думаю, что это лучшее, что можно сделать. Я удивлен, что ChannelFactory в наши дни все еще ожидает, что вы будете использовать шаблон APM. - person Andrew Webb; 19.11.2012

Вы видели это? Я сделал пример ожидаемого [OperationContract] возврата Task<TResponse>.

person Stefan Forster    schedule 29.11.2012
comment
Спасибо; Я проверю это. - person Andrew Webb; 03.12.2012