Служба IIS WCF и служба Windows

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

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

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

7 ответов

Решение

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

Мы провели несколько тестов и выяснили, что когда мы добавляем привязки в 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 Advenced настройки вы будете ставить

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

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

8001:*

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

Вы также должны иметь на своем сервере функцию "Активация WCF, (Активация Http и Активация без Http)".

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

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

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

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

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

Марк

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

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

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

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

Интересный тидбит-> после прочтения этой темы я наткнулся на эти слова в 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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам