Поделиться через


Службы WCF и ASP.NET

В этом разделе рассматривается размещение служб Windows Communication Foundation (WCF) параллельно с ASP.NET и их размещение в режиме совместимости ASP.NET.

Размещение WCF параллельно с ASP.NET

Службы WCF, размещенные в службы IIS (IIS), могут находиться с помощью . Страницы ASPX и веб-службы ASMX внутри одного общего домена приложения. ASP.NET предоставляет общие службы инфраструктуры, такие как управление appDomain и динамическая компиляция для WCF и среды выполнения ASP.NET HTTP. Конфигурация по умолчанию для WCF выполняется параллельно с ASP.NET.

Screenshot showing WCF Services and ASP .NET: sharing state.

Среда выполнения HTTP ASP.NET обрабатывает ASP.NET запросы, но не участвует в обработке запросов, предназначенных для служб WCF, даже если эти службы размещаются в том же домене приложений, что и ASP.NET содержимое. Вместо этого модель службы WCF перехватывает сообщения, адресованные службам WCF, и направляет их через стек транспорта и канала WCF.

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

  • службы ASP.NET и WCF могут совместно использовать состояние AppDomain. Так как две платформы могут сосуществовать в одном домене приложений, WCF также может совместно использовать состояние AppDomain с ASP.NET (включая статические переменные, события и т. д.).

  • Службы WCF работают согласованно, независимо от среды размещения и транспорта. Среда выполнения HTTP ASP.NET преднамеренно связана со средой размещения IIS/ASP.NET и обменом данных по протоколу HTTP. И наоборот, WCF предназначен для последовательного поведения в средах размещения (WCF ведет себя согласованно как внутри, так и за пределами IIS) и между транспортом (служба, размещенная в IIS 7.0 и более поздних версиях, имеет согласованное поведение во всех конечных точках, которые он предоставляет, даже если некоторые из этих конечных точек используют протоколы, отличные от HTTP).

  • В домене приложения функции, реализованные средой выполнения HTTP, применяются к ASP.NET содержимому, но не к WCF. Многие функции платформы приложений ASP.NET http не применяются к службам WCF, размещенным в домене приложения, который содержит ASP.NET содержимое. В примеры этих возможностей входит следующее.

    • HttpContext: Current всегда null используется при доступе из службы WCF. Вместо этого используйте RequestContext.

    • Авторизация на основе файлов: модель безопасности WCF не разрешает список управления доступом (ACL), применяемый к SVC-файлу службы при принятии решения о том, разрешен ли запрос на обслуживание.

    • Авторизация URL-адресов на основе конфигурации. Аналогичным образом модель безопасности WCF не соответствует правилам авторизации на основе URL-адресов, указанным в элементе конфигурации авторизации> System.Web<. Эти параметры игнорируются для запросов WCF, если служба находится в пространстве URL-адресов, защищенном правилами авторизации URL-адресов ASP.NET.

    • Расширяемость HttpModule: инфраструктура размещения WCF перехватывает запросы WCF при PostAuthenticateRequest возникновении события и не возвращает обработку в конвейер http ASP.NET. Модули, закодированные для перехвата запросов на последующих этапах конвейера, не перехватывают запросы WCF.

    • ASP.NET олицетворение. По умолчанию WCF-запросы всегда выполняются как удостоверение процесса IIS, даже если ASP.NET включена олицетворение с помощью олицетворения идентификатора <System.Web="true" /> параметра конфигурации.

Эти ограничения применяются только к службам WCF, размещенным в приложении IIS. Поведение ASP.NET содержимого не влияет на наличие WCF.

Приложения WCF, которые обычно требуют функциональных возможностей, предоставляемых конвейером HTTP, должны использовать эквиваленты WCF, которые являются независимыми от узла и транспорта:

  • OperationContext вместо HttpContext.

  • ServiceAuthorizationBehavior вместо авторизации на основе файла или URL-адреса ASP.NET.

  • IDispatchMessageInspector или пользовательские многоуровневые каналы вместо HTTP-модулей.

  • Олицетворение для каждой операции с помощью WCF вместо олицетворения System.Web.

Кроме того, можно использовать службы в режиме совместимости ASP.NET WCF.

Размещение служб WCF в режиме совместимости ASP.NET

Хотя модель WCF предназначена для согласованного поведения в средах размещения и транспортах, часто существуют сценарии, в которых приложение не требует такой степени гибкости. Режим совместимости WCF ASP.NET подходит для сценариев, которые не требуют возможности размещения за пределами IIS или обмена данными по протоколам, отличным от HTTP, но используют все функции платформы веб-приложений ASP.NET.

В отличие от параллельной конфигурации по умолчанию, где инфраструктура размещения WCF перехватывает сообщения WCF и направляет их из конвейера HTTP, службы WCF, работающие в режиме совместимости ASP.NET, полностью участвуют в жизненном цикле HTTP-запроса ASP.NET. В режиме совместимости службы WCF используют конвейер HTTP через IHttpHandler реализацию, аналогично тому, как обрабатываются запросы на страницы ASPX и веб-службы ASMX. В результате WCF работает одинаково с ASMX в отношении следующих ASP.NET функций:

  • HttpContext: службы WCF, работающие в режиме совместимости ASP.NET, могут получить доступ Current и связанное с ним состояние.

  • Авторизация на основе файлов: службы WCF, работающие в режиме совместимости ASP.NET, могут быть защищены путем подключения списков управления доступом файловой системы (ACL) к SVC-файлу службы.

  • Настраиваемая авторизация URL-адресов. Правила авторизации URL-адресов ASP.NET применяются для запросов WCF при запуске службы WCF в режиме совместимости ASP.NET.

  • HttpModuleCollection расширяемость. Так как службы WCF, работающие в режиме совместимости ASP.NET, полностью участвуют в жизненном цикле http-запроса ASP.NET, любой модуль HTTP, настроенный в конвейере HTTP, может работать с запросами WCF как до, так и после вызова службы.

  • ASP.NET олицетворение: службы WCF выполняются с использованием текущего удостоверения ASP.NET олицетворенного потока, который может отличаться от удостоверения процесса IIS, если ASP.NET олицетворение было включено для приложения. Если ASP.NET олицетворение и олицетворение WCF включены для определенной операции службы, реализация службы в конечном итоге выполняется с использованием удостоверения, полученного из WCF.

Режим совместимости WCF ASP.NET включен на уровне приложения с помощью следующей конфигурации (расположен в файле web.config приложения):

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>

Это значение по умолчанию имеет значение, false если оно не указано. Значение false указывает, что все службы WCF, работающие в приложении, не будут выполняться в режиме совместимости ASP.NET.

Так как режим совместимости ASP.NET подразумевает семантику обработки запросов, которые по умолчанию отличаются от WCF, отдельные реализации служб могут контролировать, выполняются ли они внутри приложения, для которого включен режим совместимости ASP.NET. Службы могут использовать атрибут AspNetCompatibilityRequirementsAttribute для указания, поддерживают ли они режим совместимости ASP.NET. По умолчанию атрибут имеет значение Allowed.

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class CalculatorService : ICalculatorSession
{//Implement calculator service methods.}

В следующей таблице показано взаимодействие параметра режима совместимости на уровне приложения с заданным уровнем поддержки отдельной службы.

Параметр режима совместимости на уровне приложения [AspNetCompatibilityRequirementsMode]

Параметр
Полученный результат
aspNetCompatibilityEnabled = "true" Required Служба включается успешно.
aspNetCompatibilityEnabled = "true" Allowed Служба включается успешно.
aspNetCompatibilityEnabled = "true" NotAllowed При получении службой сообщения возникает ошибка активации.
aspNetCompatibilityEnabled = "false" Required При получении службой сообщения возникает ошибка активации.
aspNetCompatibilityEnabled = "false" Allowed Служба включается успешно.
aspNetCompatibilityEnabled = "false" NotAllowed Служба включается успешно.

Примечание.

IIS 7.0 и WAS позволяют службам WCF обмениваться данными по протоколам, отличным от ПРОТОКОЛА HTTP. Однако службы WCF, работающие в приложениях с включенными ASP.NET режимом совместимости, не могут предоставлять конечные точки, отличные от HTTP. В такой конфигурации создается исключение активации, когда служба получает первое сообщение.

Дополнительные сведения о включении режима совместимости ASP.NET для служб WCF см. в примере AspNetCompatibilityRequirementsModeсовместимости ASP.NET.

См. также