Должен ли я разместить мою службу WCF в IIS?

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

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

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

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

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

Ответы

Ответ 1

Вам нужно в основном рассмотреть три варианта:

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 в консольном приложении, которое вы можете запустить и остановить на досуге.

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

Это может измениться после появления нового "Dublin" Server-Addon от Microsoft - когда-то после запуска .NET 4, возможно, в начале 2010 года, но еще слишком рано говорить.

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

Марк

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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

Ответ 4

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

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

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