Развертывание службы WCF, размещенной в IIS
Процесс разработки и развертывания службы Windows Communication Foundation (WCF), которая размещается в службах IIS, состоит из следующих задач.
Проверка правильности установки и регистрации служб IIS, ASP, WCF и компонента активации WCF.
Создание нового приложения IIS или повторное использование существующего приложения ASP.NET.
Создание SVC-файла для службы WCF.
Развертывание реализации службы в приложение IIS.
Настройка службы WCF.
Подробное пошаговое руководство по созданию службы WCF, размещенной в IIS, см. в разделе Как разместить службу WCF в IIS.
Проверка правильности установки и регистрации IIS, ASP.NET и WCF
Для правильной работы служб WCF, размещенных в IIS, должны быть установлены WCF, IIS и ASP.NET. Процедуры установки WCF (как компонента платформы Платформа .NET Framework 3.0), ASP.NET и IIS зависят от используемой версии операционной системы. Дополнительные сведения установке WCF и платформы Платформа .NET Framework 3.0 см. в разделе Веб-установщик Microsoft .NET Framework 4.0. Инструкции по установке IIS см. в разделе Установка IIS.
В процессе установки платформы Платформа .NET Framework 3.0 выполняется автоматическая регистрация WCF с IIS, если IIS уже имеется на компьютере. Если IIS устанавливается после платформы Платформа .NET Framework 3.0, для регистрации WCF с IIS и ASP.NET требуется дополнительный шаг. Это можно выполнить указанным ниже способом в зависимости от операционной системы.
Windows XP с пакетом обновления 2 (SP2) и Windows Server 2003: для регистрации WCF со службами IIS используйте программу Средство регистрации ServiceModel (ServiceModelReg.exe). Для этого введите в командной строке ServiceModelReg.exe /i /x.
Windows Vista: установите подкомпонент "Компоненты активации Windows Communication Foundation" платформы Платформа .NET Framework 3.0. Для этого на панели управления щелкните значок Установка и удаление программ и затем значок Установка и удаление компонентов Windows. При этом активируется Мастер компонентов Windows.
Наконец, необходимо убедиться в том, что среда ASP.NET настроена для использования платформы .NET Framework 4.0. Для этого запустите средство ASPNET_Regiis с параметром -i. Дополнительные сведения см. в разделе Средство регистрации IIS ASP.NET
Создание нового приложения служб IIS или повторное использование существующего приложения ASP.NET
Службы WCF, размещенные в IIS, должны находиться в приложении IIS. Можно создать новое приложение IIS только для размещения служб WCF. Можно также развернуть службу WCF в существующее приложение, в котором уже размещено содержимое ASP.NET 2.0 (например, страницы ASPX и веб-службы ASP.NET [ASMX]). Дополнительные сведения этих возможностях см. в подразделах "Параллельное размещение WCF и ASP.NET" и "Размещение служб WCF в режиме совместимости с ASP.NET" раздела Службы WCF и ASP.NET.
Обратите внимание, что IIS 6,0 и более поздние версии периодически перезагружают изолированное приложение объектно-ориентированного программирования. Значение по умолчанию — 1740 минут. Максимальное поддерживаемое значение — 71582 минуты. Эту перезагрузку можно отключить. Дополнительные сведения данном свойстве см. в разделе PeriodicRestartTime.
Создание SVC-файла для службы WCF
Службы WCF, размещенные в IIS, представляются внутри приложения IIS в виде файлов со специальным содержимым (SVC-файлов). Эта модель подобна модели, согласно которой страницы ASMX представляются внутри приложения IIS в виде ASMX-файлов. SVC-файл содержит директиву обработки WCF (@ServiceHost), позволяющую инфраструктуре размещения WCF активировать размещенные службы в ответ на входящие сообщения. В приведенном ниже операторе показан наиболее распространенный синтаксис SVC-файла.
<% @ServiceHost Service="MyNamespace.MyServiceImplementationTypeName" %>
Он содержит директиву @ServiceHost и один атрибут, Service. Значение атрибута Service — имя типа среды CLR реализации службы. Использование этой директивы по существу эквивалентно созданию основного приложения службы с помощью следующего кода.
new ServiceHost( typeof( MyNamespace.MyServiceImplementationTypeName ) );
Можно также создать дополнительную конфигурацию размещения, например список базовых адресов службы. Кроме того, можно применить пользовательскую фабрику ServiceHostFactory, чтобы расширить директиву для использования с пользовательскими решениями по размещению. Приложения IIS, в которых размещаются службы WCF, не отвечают за управление созданием и временем существования экземпляров ServiceHost. Управляемая инфраструктура размещения WCF создает необходимый экземпляр ServiceHost динамически при получении первого запроса для SVC-файла. Этот экземпляр не освобождается, пока он не будет явно закрыт кодом или не перезапустится приложение.
Дополнительные сведения синтаксисе SVC-файлов см. в разделе @ServiceHost.
Развертывание реализации службы в приложение IIS
Для служб WCF, размещенных в IIS, используется та же модель динамической компиляции, что и для ASP.NET 2.0. Точно так же, как при использовании ASP.NET, код реализации для размещенных в IIS служб WCF можно развернуть несколькими способами в разных расположениях следующим образом.
В виде предкомпилированного DLL-файла, расположенного в глобальном кэше сборок или в каталоге \bin приложения. Предкомпилированные двоичные файлы не обновляются, пока не будет развернута новая версия библиотеки классов.
В виде нескомпилированных исходных файлов, расположенных в каталоге \App_Code приложения. Исходные файлы, расположенные в этом каталоге, запрашиваются динамически при обработке первого запроса приложения. Любые изменения в файлах в каталоге \App_Code приводят к перезапуску и повторной компиляции всего приложения при получении следующего запроса.
В виде нескомпилированного кода, расположенного непосредственно в SVC-файле. Код реализации может быть также размещен в SVC-файле службы после директивы @ServiceHost. Любые изменения во встроенном коде приводят к перезапуску и повторной компиляции приложения при получении следующего запроса.
Дополнительные сведения модели компиляции ASP.NET 2.0 см. в разделе Общие сведения о компиляции в ASP.NET.
Настройка службы WCF
Конфигурация размещенных в IIS служб WCF хранится в файле Web.config приложений. Для размещенных в IIS служб используются те же элементы конфигурации и синтаксис, что и для служб WCF, размещенных вне IIS. Однако для среды размещения IIS присущи следующие ограничения.
Базовые адреса размещенных в IIS служб.
Приложения, где размещаются службы WCF вне IIS, могут управлять базовыми адресами размещенных в них служб, передавая ряд универсальных кодов ресурсов (URI) базовых адресов в конструктор ServiceHost или обеспечивая наличие элемента <host> в конфигурации службы. Службы, размещенные в IIS, не могут управлять своими базовыми адресами; базовым адресом службы, размещенной в IIS, является адрес ее SVC-файла.
Адреса конечных точек для служб, размещенных в IIS
Будучи размещенными в IIS, адреса конечных точек всегда считаются относительными для адреса SVC-файла, представляющего службу. Например, если базовым адресом службы WCF является адрес https://localhost/Application1/MyService.svc со следующей конфигурацией конечной точки.
<endpoint address="anotherEndpoint" .../>
Эта конфигурация предоставляет конечную точку, которая может быть достигнута по адресу "https://localhost/Application1/MyService.svc/anotherEndpoint".
Аналогично, элемент конфигурации конечной точки, в котором в качестве относительного адреса используется пустая строка, обеспечивает конечную точку, достижимую по адресу https://localhost/Application1/MyService.svc, который является базовым адресом.
<endpoint address="" ... />
Для конечных точек служб, размещенных в IIS, следует всегда использовать относительные адреса. Предоставление полного адреса конечной точки (например, https://localhost/MyService.svc) может привести к ошибкам при развертывании службы, если адрес конечной точки не соответствует IIS-приложению, в котором размещается служба, представляющая эту конечную точку. Использование относительных адресов конечных точек для размещенных служб позволяет избежать таких потенциальных конфликтов.
Доступные типы транспорта
Службы WCF, размещенные в IIS 5.1 и IIS 6,0, могут использовать связь только по протоколу HTTP. В этих платформах IIS настройка размещенной службы на использование привязки, отличной от HTTP, приводит к ошибке во время активации службы. Для IIS 7.0 поддерживается транспорт HTTP, Net.TCP, Net.Pipe, Net.MSMQ и msmq.formatname для обратной совместимости с существующими приложениями MSMQ.
Безопасность транспорта HTTP
Размещенные в IIS службы WCF могут пользоваться средствами обеспечения безопасности транспорта HTTP (например, такими схемами проверки подлинности HTTPS и HTTP, как "Обычная проверка подлинности", "Дайджест-проверка подлинности" и "Встроенная проверка подлинности Windows"), если виртуальный каталог IIS, содержащий службу, поддерживает названные параметры. Параметры безопасности транспорта HTTP в привязке размещенной конечной точки должны соответствовать параметрам безопасности транспорта в виртуальном каталоге IIS, который содержит эту привязку.
Например, конечная точка WCF, настроенная на использование дайджест-проверки подлинности HTTP, должна находиться в виртуальном каталоге IIS, который также настроен на разрешение дайджест-проверки подлинности HTTP. Несоответствующие сочетания параметров IIS и параметров конечной точки WCF приводят к ошибке во время активации службы.
См. также
Основные понятия
Размещение в службах IIS
Рекомендации по размещению в службах IIS