如果采用自我寄宿的方式,我们需要为每个寄宿的服务创建ServiceHost对象。但是一个应用往往具有很多服务需要被发布,基于单个服务的ServiceHost的创建将会变成一个很繁琐的事情。如果我们能够采用某种机制来读取所有配置的服务,并自动为它们创建相应的ServiceHost对象,这无疑是一种理想的方式。[源代码从这里下载]
我想很多人想到了直接读取表示寄宿服务的<system.serviceModel>/<services>/<service>配置元素列表,通过其name配置属性得到表示服务的“类型”,并据此创建相应的ServiceHost对象。这种做法是不被推荐的,原因有二:
- <service>配置元素的name属性并不是寄宿服务的类型全名,而是通过ServiceBehaviorAttribute特性对应的服务配置名称;
- 即使我们不对服务的配置名称作显式设置,让该名称表示成服务类型全名,但是由于它并包含程序集名称,我们往往不得不加载所有可用的程序集。
我们可以将需要需要批量寄宿的服务类型定义在配置文件中。很多人喜欢直接采用<appSettings>作为自定义的配置,但是我个人是既不推荐这种做法的,我觉得自定义结构化的配置节是更好的选择。批量寄宿的服务类型就定义在具有如下结构的 <artech.batchingHosting>配置节下。
>
/>
/>
/>
>