除了采用自定义特性声明(服务行为、契约行为和操作行为)或者配置的方式(服务行为和终结点行为)应用自定义的行为之外,我们还可以通过自定义ServiceHost来应用这些自定义的行为。自定义ServiceHost是对WCF的服务端进行扩展的一种常用的方式。
在创建ServiceHost的时候,WCF会加载服务相关的配置并将其作为服务的描述信息附加到ServiceHost对象上,我们也可以在开启ServiceHost之前对其服务描述信息进行相应的修改。ServiceHost在开启之前具有的服务描述信息将会决定在开启之后创建的服务端运行时框架。所以如果我们通过自定义ServiceHost对象并根据具体应用场景的具体需求对其服务描述进行定制,同样可以起到对WCF服务端进行扩展的目的。
目录
一、自定义ServiceHost的本质:对服务描述进行定制
二、ServiceHost开启后对Description的定制无效
三、通过自定义ServiceHost对分发运行时进行定制是无效的
四、 自定义ServiceHost的创建者:ServiceHostFactory
一、自定义ServiceHost的本质:对服务描述进行定制
通过前面对WCF服务端运行时框架的介绍,我们知道了在初始化ServiceHost时创建的服务描述是构建服务端运行时框架的基础。服务描述通过类型ServiceDescription表示,被创建的服务描述可以通过ServiceHost的只读属性Description得到。下面的代码片断表示该属性在ServiceHost的基类ServiceHostBase中的定义。
class ServiceHostBase : CommunicationObject, IExtensibleObject<ServiceHostBase>, IDisposable
2: {
//其他成员
public ServiceDescription Description { get; }
5: }