Включение Windows Identity Foundation в веб-службе
WIF обеспечивает простую интеграцию с WCF. Она позволяет службе WCF использовать такие возможности WIF, как новая модель утверждений, поддержка дополнительных типов маркеров безопасности (SAML 2.0) и обработка маркеров. В данном разделе описывается выполнение этих операций.
Включение Windows Identity Foundation в службе WCF с резидентным размещением
- В Visual Studio добавьте ссылку на сборку
WIF(
Microsoft.IdentityModel.dll
) в проект службы WCF.
- Добавьте код, который вызывает метод
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 с размещением в Интернете
- В Visual Studio добавьте ссылку на сборку
WIF(
Microsoft.IdentityModel.dll
) в проект службы WCF.
- Создайте новый класс, наследующий от
ServiceHostFactory
.
- Переопределите метод
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"%> |