Должен ли я разместить свой сервис WCF в IIS? - PullRequest
15 голосов
/ 04 августа 2009

Итак, я разрабатываю сервис WCF. У меня нет опыта работы с WCF, и я пытаюсь решить, должен ли он быть размещен в IIS или в пользовательском сервисе Windows.

Что нужно учитывать:

  • Требуется загрузить данные из базы данных при запуске.
  • Необходимо поддерживать эти данные в запросах, а не загружать их каждый раз.
  • Необходимо обрабатывать несколько запросов одновременно.
  • Он должен быть максимально настраиваемым в отношении конечных точек.
  • Он будет часто вызывать нативные dll.

Я подозреваю, что размещение этого в IIS упростит некоторые вещи, но я не уверен, что это будет хорошей идеей в этой ситуации.

Какие у меня варианты, и каковы их плюсы и минусы?

Ответы [ 4 ]

16 голосов
/ 04 августа 2009

Вам нужно в основном взглянуть на три варианта:

1) Хостинг в IIS6 (Windows Server 2003/2003 R2): в этом сценарии вы можете размещать только HTTP-протоколы - больше ничего. Это само по себе ограничение, вы не можете использовать, например, netTcp для интранет-сценариев.

2) Хостинг в IIS7 / WAS (Vista, Server 2008): это дает вам больше возможностей с точки зрения поддерживаемых протоколов, и среда хостинга на первый взгляд выглядит победителем.

3) Самостоятельный хостинг: в этом сценарии вы должны сделать все, что вам нужно, чтобы разместить и запустить свои сервисы.

Если вы сейчас выбросите опцию № 1 (если у вас есть только IIS6, я бы всегда использовал собственный хостинг), то это будет IIS7 вместо самостоятельного хостинга.

IIS7 предоставляет вам «активацию по требованию», например, Ваш сервисный код не всегда находится в памяти, но будет загружен и создан при поступлении запроса. Это может быть плюсом.

С другой стороны, хостинг в IIS7 / WAS лишает вас возможности указать ваши собственные конечные точки - ваша конечная точка и, следовательно, адрес службы - это виртуальный каталог, в котором находится ваш файл MyService.svc - период. Вы не можете изменить это каким-либо образом, формой или формой.

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

Если только вы немного не поиграете с WCF, я бы всегда рекомендовал и проголосовал за самостоятельное размещение - если вам нужно постоянно запускать службу WCF внутри службы Windows NT (это лучшее решение для рабочие среды), и если вы разрабатываете / отлаживаете, вы можете полностью разместить свои службы WCF в консольном приложении, которое можно запускать и останавливать на досуге.

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

Это может измениться, как только выйдет новый "Дублинский" серверный аддон от Microsoft - через некоторое время после запуска .NET 4, возможно, в начале 2010 года - но об этом еще рано говорить.

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

Марк

6 голосов
/ 04 августа 2009

Я предпочитаю самостоятельные услуги (служба Windows). С учетом сказанного есть веские причины для того или иного пути.

В MSDN есть несколько ценных статей о различных стратегиях хостинга WCF .

Вот краткое изложение того, почему вы можете использовать IIS в качестве хоста службы.

3 голосов
/ 04 августа 2009

Я бы сказал, что без IIS7 и WAS вы не можете размещать ничего, кроме конечных точек на основе HTTP, используя IIS. Таким образом, вы, скорее всего, захотите использовать хост для гибкости.

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

Несколько запросов потребуют от вас одновременного использования WCF. Вы хотите установить атрибуты на вашем сервисном хосте:

[System.ServiceModel.ServiceBehavior(UseSynchronizationContext = false,
    InstanceContextMode = System.ServiceModel.InstanceContextMode.PerCall,
    ConcurrencyMode = System.ServiceModel.ConcurrencyMode.Multiple)]
public class MyService : IMyService
{
}

WCF - большой зверь, я рекомендую вам взглянуть на книгу Ювала Лоуи и на все остальное, что вы можете достать, вы не выучите ее за день.

1 голос
/ 04 августа 2009

Может быть, немного не по теме, но это касается четвертого рассмотрения.

Если вы в конечном итоге переходите на собственный хостинг и вам необходимо как можно более «настраивать в отношении конечных точек», вы можете взглянуть на Managed Services Engine . MSE - это продукт с открытым исходным кодом, созданный службами Microsoft, который позволяет виртуализировать ваши службы. По сути, это хост WCF, который использует метаданные из своего собственного репозитория для предоставления сервисов. Некоторые функции: поддержка параллельного управления версиями сервисов, возможность включать / отключать операции над сервисами, возможность отображать операции на конечных точках, возможность применять политики к операциям.

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

...