Должен ли я разместить мою службу 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, который использует метаданные из своего собственного хранилища для предоставления услуг. Некоторые функции: поддержка параллельного управления версиями, возможность включения/выключения операций с услугами, возможность сопоставления операций с конечными точками, возможность применения политик к операциям.
Я не уверен, что он соответствует вашим потребностям, но стоит взглянуть на него - особенно если вам нужно быть чрезвычайно настраиваемым.