У коллеги и меня есть дискуссия о сервисах WFC, когда тема "стоимости" подходит.
Вопрос - это:
Учитывая, что размещенный IIS сервис WCF и Размещенный службой Windows сервис WCF делают ту же самую вещь, какой сервис будет более "дорогим" относительно памяти и циклов ЦП, если они оба примут ту же загрузку?
Мы не обеспокоены начальным кодированием запуска, установкой или конфигурацией (которому IIS кажется приспособленным для обеспечения более простого опыта), просто базовая стоимость выполнения сервисов.
Я не могу предоставить конкретных цифр, хотя, если это вызывает серьезную озабоченность, вам обязательно нужно провести тестирование производительности, чтобы быть уверенным. Для типичной службы WCF на основе HTTP все запросы будут первоначально обрабатываться http.sys внутри Windows, а затем отправляться соответствующему процессу. Независимо от того, размещена ли ваша служба в IIS или автономно, не имеет почти такого значения, как используемые вами параметры конфигурации WCF в отношении конфигурации для каждого вызова, сеанса или одноэлементной конфигурации, а также ограничений размера запроса и регулирования запросов.
Я бы сосредоточился на удобстве использования и том, что имеет больше смысла, чем просто на показателях производительности, поскольку они должны быть почти одинаковыми.
Итог: используйте то, что удобнее, при необходимости проверьте производительность.
Я знаю, что это не полностью отвечает на ваш вопрос, но я хотел бы поделиться своим опытом.
У меня есть консольное приложение windows, которое по расписанию вызывает WCF сервисы, размещенные в IIS. В этой архитектуре IIS фактически совершенно не нужен и является просто дополнительным компонентом к общему решению. На самом деле он был включен в решение по маркетинговым причинам, чтобы приукрасить продукт, а не по техническим причинам.
Это основные проблемы, с которыми я столкнулся, и почему я бы избегал использования IIS, если бы мог, по техническим причинам, и это относится к моему опыту. Обратите внимание: я не говорю, что размещение служб WCF в IIS - плохая идея. Я просто излагаю свои мысли по продукту, над которым я работаю в настоящее время.
По моему опыту, меньше систем = меньше проблем. Но вам нужно решить, есть ли у вас навыки для реализации надежных саморазмещаемых сервисов. Все это, в свою очередь, напрямую связано со стоимостью разработки, развертывания и обслуживания.
Одно очень существенное соображение производительности между IIS или Windows service based hosting для WCF, является типом привязки. IIS поддерживает только привязки WCF, которые функционируют через HTTP, такие как wsHttpBinding
. basicHttpBinding
, etc.
Связки, не использующие HTTP, как правило, имеют лучшую производительность, например netTcpBinding (требует, чтобы служба и клиент были основаны на WCF, как я полагаю) или netNamedPipeBinding (самая быстрая, но служба/клиент должны находиться на одной машине). Конечно, у них есть свои ограничения, особенно в отношении гибкости.
Вот хороший обзор: http://weblogs.asp.net/spano/archive/2007/10/02/choosing-the-right-wcf-binding.aspx
Здесь было очень похожее обсуждение: WCF Binding Performance