如何在WCF中自托管时初始化服务对象

时间:2008-10-07 21:58:29

标签: wcf

我正在Windows服务中托管服务。

以下代码段实例化ServiceHost对象:

Host = new ServiceHost(typeof(Services.DocumentInfoService));

DocumentInfoService类实现了一个契约接口,该接口具有调用需要初始化的业务对象(实际上是连接字符串)的方法。理想情况下,我希望托管过程从配置文件中获取连接字符串,并将其传递给我的服务对象DocumentInfoService的构造函数,该构造函数将保留在其上并根据需要使用它传递给业务对象。

但是,ServiceHost构造函数采用System.Type对象 - 因此DocumentInfoService的实例是通过默认构造函数创建的。我确实注意到ServiceHost还有另一个构造函数方法,它接受一个对象实例 - 但文档表明它是用于单例的。

有没有办法让我在构造它之后到达我的对象,以便我可以传递一些初始化数据?

2 个答案:

答案 0 :(得分:4)

ServiceHost将根据为端点配置的绑定和行为创建服务实例。没有特定的时间点,您可以依赖于服务实例。因此,ServiceHost不会公开服务实例。

您可以做的是将代码添加到服务对象构造函数中,以通过ConfigurationManager类读取相关的配置值。

当然,如果你没有在app.config中保留你的配置,那对你不起作用。另一种方法是拥有一个众所周知的单例对象,服务实例在创建时访问该对象以获得必要的配置。

还可以选择创建自己的ServiceHost或自己的ServiceHostFactory来显式控制服务实例化。这将使您在创建时获得新服务实例。我会远离那个选项。对你的场景来说,这是不值得的。

答案 1 :(得分:3)