Включение Windows Identity Foundation в веб-службе

WIF обеспечивает простую интеграцию с WCF. Она позволяет службе WCF использовать такие возможности WIF, как новая модель утверждений, поддержка дополнительных типов маркеров безопасности (SAML 2.0) и обработка маркеров. В данном разделе описывается выполнение этих операций.

Включение Windows Identity Foundation в службе WCF с резидентным размещением

  1. В Visual Studio добавьте ссылку на сборку WIF(Microsoft.IdentityModel.dll) в проект службы WCF.

  2. Добавьте код, который вызывает метод ConfigureServiceHost и передает в него экземпляр узла службы, для которого нужно включить WIF. Это необходимо сделать до вызова метода ServiceHost.Open() для этого экземпляра. Этот метод вносит необходимые изменения в параметры экземпляра ServiceHost для интеграции функций WIF с конвейером обработки сообщений WCF. В следующем примере кода показано, как это сделать.

  Копировать код
using (ServiceHost host = new ServiceHost(typeof(ClaimsAwareWebService), new Uri("http://localhost:6020/ClaimsAwareWebService"))) { // Настройка WIF на сайте службы FederatedServiceCredentials.ConfigureServiceHost(host);

	 host.Open();

	 Console.WriteLine(“Service is ready, press ENTER to close ...”); Console.ReadLine();

	 host.Close() }

Включение Windows Identity Foundation в службе WCF с размещением в Интернете

  1. В Visual Studio добавьте ссылку на сборку WIF(Microsoft.IdentityModel.dll) в проект службы WCF.

  2. Создайте новый класс, наследующий от ServiceHostFactory.

  3. Переопределите метод CreateServiceHost. В реализации сначала вызовите base.CreateServiceHost( string, Uri[] ) для создания экземпляра ServiceHost. Затем выполните программную настройку экземпляра ServiceHost, необходимого приложению. Затем вызовите ConfigureServiceHost, чтобы включить функции WIF в этом экземпляре ServiceHost. Наконец, верните настроенный экземпляр в качестве возвращаемого значения метода CreateServiceHost.

В приведенном ниже примере кода показана фабрика ServiceHostFactory, которая включает функции WIF для созданного узла ServiceHost:

  Копировать код
public class MyServiceHostFactory : ServiceHostFactory { public override ServiceHostBase CreateServiceHost( string constructorString, Uri[] baseAddresses ) { ServiceHostBase host = base.CreateServiceHost( constructorString, baseAddresses ); FederatedServiceCredentials.ConfigureServiceHost( host ); return host; } }

Поскольку пользовательская фабрика размещения служб используется для включения функций WIF в службе WCF с размещением в Интернете, SVC-файл, используемый для представления конечной точки службы WCF, должен ссылаться на эту пользовательскую фабрику размещения служб с помощью атрибута factory, как показано ниже.

  Копировать код
<%@ServiceHost language=C# Factory="Service1.MyServiceHostFactory" Service="Service1.Service1"%>