2014-10-07 3 views
0

Наш сайт имеет длительный процесс расчета, который заставляет клиента ждать несколько минут, пока он не будет завершен. Мы решили, что нам нужно изменение дизайна, а также обработать обработку в Windows или службу WCF, а клиенту представлена ​​другая страница, в то время как мы делаем все вычисления.Виды услуг для длительных процессов asp.net

Каков наилучший способ реализации сервиса?

Мы смотрели на фоне рабочих процессов, но, похоже, это проблематично, потому что, если IIS может периодически выключать темы

кажется, что лучше всего использовать либо служба Windows, или службы WCF. У кого-нибудь есть представление, по которому лучше для этой цели? Если мы размещаем эту услугу на другой машине, это должен быть сервис WCF? Похоже, что услуга (какой бы тип она ни была) трудно передать на веб-сайт - возможно, вместо этого служба может обновить свои результаты в базе данных, а веб-сайт опросит, что для получения требуемых результатов позже.

Это открытый вопрос, который я знаю, но есть ли у кого-нибудь идеи?

благодаря

+0

http://hangfire.io/ выглядит многообещающим - это, по сути, легкая очередь сообщений. Я не уверен в вашем различии между службой Windows Service & WCF. Служба Windows может содержать службу WCF. Или служба Windows может размещать ad-hoc, что бы вы ни захотели. – MatthewMartin

ответ

1

Я не думаю, что истинная выгода с точки зрения производительности будет исходить от изменения дизайна.

Если бы я выбрал между сервисом windows и WCF, я бы пошел с сервисом Windows, потому что смог бы установить близость и приоритет по мере того, как хочу. Однако мне придется реализовать логику одновременного обслуживания нескольких клиентов (которые в сервисе WCF будут обрабатываться IIS).

Что касается производительности, если вы используете платформу .NET для службы WCF и службы Windows, разница в производительности не будет значительной. Служба Windows будет более «управляемой», WCF будет более прямой и без больших штрафных санкций.

Для этих типов задач я бы сосредоточился на оптимизации оптимизации расчета одиночных потоков. Если у вас сложный расчет, может ли он быть написан в собственном коде (C или C++)? Вы можете сделать файл .DLL, который сильно оптимизирован и используется либо службой Windows, либо службой WCF. Использование этого подхода позволит вам выбрать лучший вариант компилятора и наилучшим образом использовать ресурсы вашего компьютера. Также ничто не мешает вам создавать несколько потоков в функции .DLL.

Связь между сайтом и службой может быть обеспечена в обоих случаях: через сокеты для службы Windows (дополнительный код для создания протокола) или напрямую через SOAP для WCF. Если вы нажмете результаты в базе данных, проблема будет заключаться в том, что веб-сайт (и знание для конкретного пользовательского сеанса) знают, что данные есть.

Так вот что я буду делать.

Надеюсь, это поможет.

Cheers!

+0

Спасибо за это - расчеты не так уж трудны, но они также требуют вызова внешних веб-сервисов, поэтому я думаю, что WCF может быть способом (может ли чистая служба Windows легко вызвать внешний веб-сервис?) – user2765642

+0

Чистый служба родных окон может вызывать внешнюю веб-службу, но вам нужно создать соответствующий код для реализации протокола связи. Я не думаю, что усилия будут окупаться с точки зрения производительности. WCF, вероятно, лучшее решение. – VAndrei

+0

Также проблема заключается в латентности веб-служб, а не в том, что потоки вычислений не получают достаточного приоритета. Обычно в этом случае лучшее аппаратное обеспечение с улучшенными возможностями ввода-вывода решает некоторые проблемы. Другой экзотический и изящный подход будет использовать подход memcached (http://memcached.org/) – VAndrei

1

Один из способов сделать это:

  • Клиент подает запрос на расчет с помощью вызова к службе WCF (может быть размещен в IIS)
  • запрос Расчет сохраняется в базу данных с уникальный идентификатор
  • идентификатор возвращается Клиенту
  • службы Windows (или Serveral на нескольких разных машинах) опрашивать базу данных для новых запросов
  • служба Windows, выполняет calcula Тион и сохраняет результат в таблице результатов с идентификатором
  • Клиентские опрашивает таблица результатов (с помощью службы WCF) С ID
  • Когда расчет закончен результат возвращается клиенту
+0

Привет Шираз - хороший звонок, это примерно то, что мы решили сделать. Я не уверен, давал ли я отчет о расчетах, а также обрабатывал материал, а также привлекал внешние веб-серверы, поэтому мы хотим, чтобы наш клиент продолжал использовать веб-сайт, в то время как все эти вызовы и подсчеты webservice отбираются, но Я согласен с тем, что веб-сайту проще опросить db, чтобы узнать, закончились ли вычисления, потому что «перезвонить» на сайт очень сложно. Спасибо за вашу помощь! – user2765642