WCF为REST服务的寄宿提供了一个新的ServiceHost,即WebServiceHost。WebServiceHost是ServiceHost的子类,而WebServiceHostFactory是对应的ServiceHostFactory,在基于IIS/WAS寄宿中被使用。由于对REST服务绝大部分功能的支持都是通过WebHttpBehavior这么一个终结点行为实现的,所以WebServiceHost的核心功能就是将该终结点行为应用到寄宿服务的所有终结点。除此之外,WebServiceHost还具有一些额外的功能,这些功能都是通过重写OnOpening方法实现的。
由于WebHttpBehavior提供了帮助页面,所以当我们通过WebServiceHost对REST服务进行寄宿的时候会屏蔽掉通过ServiceDebugBehavior服务行为提供的帮助页面。由于通过服务行为ServiceMetadataBehavior实现的元数据发布机制是基于SOAP的,如果我们在寄宿服务上应用了ServiceMetadataBehavior行为,WebServiceHost也会将基于HTTP-GET的元数据发布功能屏蔽。我们可以通过一个简单的实例来证实这一点。
using (WebServiceHost host = new WebServiceHost(typeof(EmployeesService)))
2: {
3: ServiceDebugBehavior serviceDebug =
4: host.Description.Behaviors.Find<ServiceDebugBehavior>();
null == serviceDebug)
6: {
7: serviceDebug = new ServiceDebugBehavior();
Add(serviceDebug);
9: }
true;
true;
12:
13: ServiceMetadataBehavior serviceMetadata =
14: host.Description.Behaviors.Find<ServiceMetadataBehavior>();
null == serviceMetadata)
16: {
17: serviceMetadata = new ServiceMetadataBehavior();
Add(serviceMetadata);
19: }
true;
true;
Open();
23:
27:
31: }