Служба IIS WCF и служба Windows - PullRequest
45 голосов
/ 13 октября 2009

Мы разработали сервис WCF и надеемся развернуть его. Наши клиенты будут использовать его с basicHttpBinding, но наша внутренняя команда будет использовать его с namedPipesBinding.

Нам интересно, лучше ли разместить его в IIS 7 или с помощью службы Windows. Мы провели несколько тестов и обнаружили, что при добавлении привязок в IIS он не обновляет конфигурационный файл нашего сервиса. Это означает, что нам необходимо поддерживать конфигурацию в двух разных местах. Это не логично, верно?

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

Ответы [ 7 ]

75 голосов
/ 13 октября 2009

Хостинг в IIS имеет много плюсов и минусов.

Да, IIS обеспечивает загрузку по требованию - это может быть плюсом или минусом. Когда приходит запрос, создается ServiceHost, затем создается экземпляр класса обслуживания, и запрос обрабатывается. Ничто не должно бегать круглосуточно. Но в то же время такая настройка требует больше времени и усилий каждый раз, когда приходит сообщение, и вы, как программист, на самом деле не имеете большого контроля над хостом службы.

И да, в IIS виртуальный каталог, в котором находится файл * .svc, определяет ваш адрес - любые базовые адреса или явно определенные адреса в вашей конфигурации не учитываются. И без особых усилий вы не сможете изменить расположение адресов служб - они всегда будут http://servername/virtualdirectory/YourService.svc (включая расширение .svc).

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

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

Марк

26 голосов
/ 14 октября 2009

marc_s обычно дает отличные ответы, с которыми я полностью согласен, но в этом случае я не даю.
Самостоятельное размещение WCF не очень хорошая идея, особенно в связи с тем, что Microsoft вскоре выпустит технологии Dublin. Управление и работа приложений WCF (и WF) намного проще, если они размещены внутри IIS.

Кроме того, вы получаете загрузку по требованию.

Существует опция всегда включенного для IIS7.5 (WS2008 R2).

И вы можете легко переписать URL, чтобы пропустить .svc, если это вас беспокоит.

16 голосов
/ 11 мая 2011

Интересный тидбит-> после прочтения этой ветки я наткнулся в MSDN на слова о размещении службы WCF с помощью службы Windows:

Ниже перечислены некоторые недостатки служб Windows:

• Развертывание: службы должны быть установлены с помощью утилиты .NET Framework Installutil.exe или с помощью настраиваемого действия в пакете установщика.
• Ограниченные возможности: службы Windows по-прежнему имеют ограниченный набор готовых функций для поддержки сценариев высокой доступности, простоты управления, управления версиями и развертывания. По сути, вы должны сами покрыть эти требования с помощью пользовательского кода, в то время как, например, IIS поставляется с некоторыми из этих функций по умолчанию. Службы Windows действительно обеспечивают возможность восстановления и некоторые функции безопасности, но вам все равно придется поработать самостоятельно.
http://msdn.microsoft.com/en-us/library/bb332338.aspx

... и по следующей ссылке:

Услуги хостинга: (хорошая сравнительная таблица)
http://msdn.microsoft.com/en-us/library/ms730158.aspx

11 голосов
/ 14 октября 2009

Чтобы ответить на эти вопросы:

Мы провели несколько тестов и выяснили что, когда мы добавляем привязки в IIS, он не обновляет конфигурационный файл наш сервис. Это означает, что мы бы необходимо поддерживать конфигурацию в два разных места. Это не логика, верно?

Когда вы используете IIS для размещения своей службы, вы должны сконфигурировать свой файл App.config или файл web.config, чтобы IIS предоставил некоторую привязку, поэтому в файле конфигурации вы поместите всю разрешенную привязку в свой wcf оказание услуг. Http, net.tcp и т.д ...

В вашей привязке вы не будете указывать адрес, потому что вы будете указывать эти адреса непосредственно в IIS.

В IIS вы должны разрешить привязку, доступную в дополнительных настройках вашего веб-сайта. После этого вы установите новую привязку для вашего веб-сайта «веб-сервис» и добавите все привязки, которые хотите прослушать, и укажите адрес.

Вы будете указывать адрес непосредственно в IIS.

Вот пример.

Ваш файл конфигурации:

<services>
    <service name="ServiceName">                    
        <endpoint address=""
            binding="basicHttpBinding"
            bindingConfiguration="httpMode"
            contract="IContract" />                 
        <endpoint address=""
            binding="netTcpBinding"
            contract="IContract" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    </service>
</services>

В вашей настройке IIS добавится

http, net.tcp во включенных протоколах

После этого вы перейдете в привязку к IIS. Поместите свою привязку для http normaly и добавьте новую привязку net.tcp, в конфигурации привязки укажите порт и виртуальный каталог, например

8001 *

Этот параметр разрешает все подключения к порту 8001 для любого виртуального каталога.

На вашем сервере также должна быть установлена ​​функция «Активация WCF (Активация Http и Активация без Http)».

7 голосов
/ 04 декабря 2012

На этот вопрос нет стандартного ответа. Я полностью не согласен с ответом от Cheeso (Самостоятельный хостинг WCF не очень хорошая идея).

Пожалуйста, проверьте следующие ссылки: (http://msdn.microsoft.com/en-us/library/ms730158.aspx, http://msdn.microsoft.com/en-us/library/bb332338.aspx) и подумайте о своих ограничениях:

  • оперативная система
  • ожидаемая производительность
  • доступно HW
  • ожидаемое наличие

и вы увидите, что во многих ситуациях «сам хостинг» является лучшей альтернативой.

5 голосов
/ 13 октября 2009

IIS предоставляет вам множество встроенных функций, таких как перезагрузка домена приложения, мониторинг и т. Д.

Вот почему вы должны сначала ответить на эти вопросы: вам нужны все эти функции или нет? Если нет - можно рассмотреть службу Windows.

0 голосов
/ 23 января 2013

Несмотря на то, что здесь есть выбранный ответ, я позволю себе опубликовать ссылку на тему вопросов и ответов.

Как настроить службу WCF из кода при размещении в IIS?

То, что вы найдете в моем ответе там (и ссылку в нем), является вашим точным контролем над хостом службы, загружаете ли вы его в WService или в IIS.

После запуска службы вы можете узнать, какие привязки есть у IIS, и создать соответствующие конечные точки. Ищите конфигурацию II через пространство имен Microsoft.Web.Administration.

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

...