Nano Hash - криптовалюты, майнинг, программирование

Клиент Async/Await WCF в PCL

Проект, над которым я работаю, использует службу WCF на стороне сервера (код находится в том же проекте). Я хочу расширить его, написав PCL, который использует службу и хотел бы реализовать вызовы с шаблоном Async/Await.

Поскольку PCL не поддерживает Async/Await с самого начала, я добавил в проект пакет BCL.Async через Nuget. Но всякий раз, когда я пытаюсь сгенерировать прокси-сервер, асинхронный клиент на основе задачи не может быть выбран, т.е. сгенерирован. Добавление прокси вручную через ChannelFactory также не представляется возможным в PCL.

Мой текущий подход заключается в создании прокси-сервера, копирующего класс ref, а затем самостоятельно записывающего шаблон async/await с помощью оболочки Task, предоставленной TPL. Но есть ли способ проще? Как мне вручную написать оболочку, используя шаблон async/await напрямую, не создавая несколько шаблонов async с одинаковым эффектом?


  • Не используйте TPL/Task.Run для переноса вызовов WCF. Вы не выполняете настоящую беспоточную асинхронность, которая, если предположить, что вы действительно работаете на встроенном устройстве, будет иметь огромное значение. Однако вы можете использовать метод Task.Factory.FromAsync(BeginXXX,EndXXX)... который будет работать правильно. 18.02.2014
  • @ Арон, спасибо за вклад. Ссылка TPL на самом деле ведет прямо к методу, который вы упомянули, поэтому я думаю, что это будет правильный путь, за исключением того, что я могу каким-то образом написать/сгенерировать клиент wcf на основе задач. 18.02.2014
  • Я знаю два способа. Во-первых, используйте прямые ссылки (в отличие от WSDL) для ваших интерфейсов (что я рекомендую, когда ваш клиент и сервер разрабатываются из одного и того же репозитория). Во-вторых, вручную добавить асинхронные методы с помощью ключевого слова partial. 18.02.2014
  • @Марк, ты получил правильный ответ? Вы можете поделиться им с нами? Я тоже застрял в этом сценарии!... 19.02.2014
  • @ Деннис Меня все еще нет .. Но как только у меня будет рабочее решение, я опубликую обновление .. 19.02.2014
  • @Mark - Спасибо .. какие-нибудь обновления? 24.02.2014
  • @ Деннис, извините за задержку, смотрите мой ответ, то есть сообщение в блоге. Короткий ответ, пока вам придется писать его вручную. Возможно, с выходом WP8.1 в апреле мы увидим автоматически сгенерированный Async/Await Proxy. 05.03.2014

Ответы:


1

В конце концов я сгенерировал прокси-сервер и вручную обернул сгенерированную модель APM с помощью TaskFactory, чтобы сгенерировать шаблон Async/Await в клиенте в PCL. Я записал это в этом сообщении в блоге.

Изменить: обновлена ​​неработающая ссылка.

04.03.2014
  • ваша ссылка битая :( 20.11.2014

  • 2

    Пробовали ли вы использовать параметр /async с инструментом svcUtil.exe?

    Дополнительные сведения см. здесь Служебное средство метаданных ServiceModel (Svcutil.exe )

    18.02.2014
  • Не используйте параметр /async. Он используется для создания методов APM старого стиля. Версия scvutil, поставляемая с .NET 4.5, по умолчанию генерирует методы Task. 18.02.2014
  • @PanagiotisKanavos, я не тестировал этот метод, я основывал его на приведенной выше документации, которая указывает на документацию .NET 4.5. Это что-то новое, поскольку в документации сказано, что по умолчанию все наоборот. 19.02.2014
  • Это не ново, так это работает. Документация не ясна и даже не содержит всех параметров. В справке командной строки указано: Создать сигнатуры как синхронного, так и начала/окончания асинхронного метода. По умолчанию: генерировать сигнатуры синхронных и асинхронных методов на основе задач. Существует даже переключатель /syncOnly для предотвращения генерации любого вида асинхронного кода. 19.02.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

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

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..