建立 WCF 信賴憑證者應用程式

在 Web 服務內啟用 Windows Identity Foundation

WIF 提供與 WCF 輕鬆整合的方式。 如此可讓 WCF 服務使用 WIF 的功能,例如新的宣告模型、對其他安全性權杖類型 (SAML 2.0) 的支援,以及權杖處理。 本節說明如何進行這項整合。

在自行主控的 WCF 服務中啟用 Windows Identity Foundation

  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("https://localhost:6020/ClaimsAwareWebService"))) { // 設定服務主機上的 WIF FederatedServiceCredentials.ConfigureServiceHost(host);

     host.Open();

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

     host.Close() }

在 Web 主控的 WCF 服務中啟用 Windows Identity Foundation

  1. 在 Visual Studio 中,將 WIF 組件 (Microsoft.IdentityModel.dll) 的參考新增至 WCF 服務專案。

  2. 建立繼承自 ServiceHostFactory 的新類別。

  3. 覆寫 CreateServiceHost 方法。 在實作中,先呼叫 base.CreateServiceHost( string, Uri[] ) 來建立 ServiceHost 執行個體。 然後執行應用程式所需之 ServiceHost 執行個體的任何程式設計設定。 接著呼叫 ConfigureServiceHost 以便在該 ServiceHost 執行個體上啟用 WIF 功能。 最後傳回設定的執行個體,做為 CreateServiceHost 方法的傳回值。

下面程式碼範例示範針對建立的 ServiceHost 啟用 WIF 功能的自訂 ServiceHostFactory

public class MyServiceHostFactory : ServiceHostFactory { public override ServiceHostBase CreateServiceHost( string constructorString, Uri[] baseAddresses ) { ServiceHostBase host = base.CreateServiceHost( constructorString, baseAddresses ); FederatedServiceCredentials.ConfigureServiceHost( host ); return host; } }

由於自訂的服務主機 Factory 會用來在 Web 主控的 WCF 服務中啟用 WIF 功能,因此用來代表 WCF 服務端點的 .svc 檔必須使用 factory 屬性參考此服務主機 Factory,如下所示:

<%@ServiceHost language=C# Factory="Service1.MyServiceHostFactory" Service="Service1.Service1"%>