WCF宿主與服務托管若要公開WCF服務,需要提供一個運行服務的宿主環境。就像.Net CLR需要創建宿主環境以托管代碼一般,WCF的宿主環境同樣運行在進程的應用程序域中。在應用程序域中可以創建一個或多個ServiceHost實例,其關系如圖一所示:
圖一 托管ServiceHost
WCF並不推薦在應用程序域中創建多個ServiceHost實例。如果要托管多個服務,完全可以在一個宿主中通過多個Endpoint公開多個WCF服務。由於應用程序域對安全進行了隔離,如果需要提供不同的安全上下文,則有必要創建多個ServiceHost實例。
WCF的典型宿主包括以下四種:
1、"Self-Hosting" in a Managed Application(自托管宿主)
2、Managed Windows Services(Windows Services宿主)
3、Internet Information Services(IIS宿主)
4、Windows Process Activation Service(WAS宿主)
以下將通過一個具體的實例分別介紹這幾種宿主的托管方式及其相關的注意事項。在這樣的一個實例中,我們定義了如下的服務契約:
namespace BruceZhang.WCF.DocumentsExplorerServiceContract
{
[ServiceContract]
public interface IDocumentsExplorerService
{
[OperationContract]
[FaultContract(typeof(DirectoryNotFoundException))]
DocumentList FetchDocuments(string homeDir);
[OperationContract]
Stream TransferDocument(Document document);
}
}
服務的實現則如下所示:
namespace BruceZhang.WCF.DocumentsExplorerServiceImple