Насколько дороги ??? - Хостинг WCF Services? - PullRequest
5 голосов
/ 16 февраля 2010

Мы с коллегой обсуждаем услуги WFC, когда поднимается тема "стоимости".

Вопрос такой:

Учитывая, что служба WCF, размещенная на IIS, и служба WCF, размещенная на Windows-службе, делают одно и то же, какая служба будет более «дорогой» в отношении циклов памяти и ЦП, если они оба принимают одинаковую нагрузку?

Мы не обеспокоены начальным кодированием, установкой или настройкой при запуске (что IIS, кажется, нацелено на упрощение работы), а только на затраты на запуск сервисов.

Ответы [ 3 ]

3 голосов
/ 16 февраля 2010

Я не могу предоставить конкретные цифры, хотя, если это большая проблема, вы должны обязательно провести тестирование производительности, чтобы быть уверенным. Для типичной службы WCF на основе HTTP все запросы будут первоначально обрабатываться http.sys внутри Windows, а затем отправляться соответствующему процессу. Будет ли ваша служба размещена в IIS или автономно, не будет иметь значения почти столько же, сколько специфичные для WCF параметры конфигурации, которые вы используете, в отношении конфигурации для каждого вызова, для каждого сеанса или одноэлементного режима, а также для ограничений размера запросов и регулирования запросов. 1001 *

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

Итог: используйте все, что удобнее, тест производительности при необходимости.

2 голосов
/ 17 февраля 2010

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

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

Это основные проблемы, с которыми я сталкиваюсь, и почему я бы не стал использовать IIS, если бы мог, по техническим причинам, и это относится к моему опыту. Обратите внимание: я не говорю, что размещение служб WCF в IIS - плохая идея. Я просто высказываю свои мысли о продукте, над которым я сейчас работаю.

  1. Наличие IIS в цикле означает наличие другой системы в общем решении. Это, в свою очередь, добавляет сложности вашему развертыванию. У некоторых клиентов IIS6, у других - 7. Хотя на первый взгляд эти различия могут показаться небольшими. Не заблуждайтесь, они по-прежнему разные, то есть вы добавляете больше возможностей для различий в среде, если вы развертываете свой продукт для разных клиентов. НЕ недооценивайте эти различия. У меня даже есть клиенты, пытающиеся запустить мои службы WCF в семействе сайтов SharePoint (да!). Дело в том, что гораздо больше, чем вы думаете, может пойти не так.
  2. IIS также рассматривает AppPool, который может потребоваться настроить в зависимости от сложности вашего продукта. Для этого AppPool требуется идентификация, что еще больше усложнит ваше общее решение.
  3. У меня были некоторые проблемы, когда однопоточный сервис иногда имел «интересный» - поток прерывания сообщений. Хотя я все еще пытаюсь выяснить точную причину, в глубине души я искренне надеюсь, что это как-то не связано с IIS. Дело в том, что у меня не было бы этого соображения, если бы я исключил IIS из общего решения.
  4. Я слышал дискуссии о том, что IIS является более надежной средой размещения для служб WCF по сравнению с самостоятельным размещением. Я не совсем уверен, что это имеет какое-то значение. Если вы знаете, что делаете, не должно быть оснований для ненадежности службы, которую вы сами принимаете. Но я полагаю, что для реализации некоторых автоматических функций, которые вы получаете в IIS, требуется больше усилий, например, утилизация WP.
  5. Я не в целом недоволен IIS в цикле, но мне неприятно, когда я передаю продукт для развертывания, и консультанты без сильной технической подготовки вынуждены настраивать приложение IIS. Обычно что-то может пойти и пойдет не так, и для того, чтобы вмешаться и решить, нужно привлечь кого-то с большим техническим опытом. Если вы используете хостинг самостоятельно, вы можете упростить упаковку приложения для развертывания.
  6. Извините, что повторяю, но если вы выберете IIS, в вашем решении будет 2 приложения, а не 1, даже если деловая сторона вашей организации будет рассматривать приложение только как одно подразделение, по существу не понимая всей сложности решения, которое вы реализуете. Например: почему у нас есть 2 файла конфигурации? Почему мы должны настроить почту дважды? Почему мы должны развертывать библиотеки DLL в 2 местах. Эти вопросы задают много.
  7. Наконец, я подумал, что упомяну, если вы работаете удаленно или через VPN для развертывания на клиентах, ситуация становится еще хуже, иногда у консультанта есть доступ к чувствительным областям, которых у вас нет. Как разработчик постарайтесь исключить как можно больше дополнительного багажа из вашего общего решения. Также отметим, что администратор sys может иногда выполнять удобный сброс IIS, если ваше приложение размещается рядом с другими, они сбрасывают ваши службы.

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

2 голосов
/ 16 февраля 2010

Одним из очень важных соображений производительности между хостингом на основе служб IIS или Windows для WCF является тип привязки. IIS поддерживает только привязки WCF, которые работают через HTTP, например wsHttpBinding. basicHttpBinding и т. Д.

Связывания, не относящиеся к Http, как известно, имеют лучшую производительность, например netTcpBinding (я полагаю, что и служба, и клиент должны основываться на WCF) или netNamedPipeBinding (самая быстрая, но сервис / клиент должен быть на той же машине). Это, конечно, имеет свои ограничения, особенно гибкость.

Вот хороший обзор: http://weblogs.asp.net/spano/archive/2007/10/02/choosing-the-right-wcf-binding.aspx

Здесь было очень похожее обсуждение: Связывание WCF

...