【问题标题】:How do I initialize a Service Object when Self-Hosting in WCF在 WCF 中自托管时如何初始化服务对象
【发布时间】:2008-10-07 21:58:29
【问题描述】:

我在 Windows 服务中托管服务。

下面的 sn-p 实例化 ServiceHost 对象:

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

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

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

有没有办法让我在构造对象后获取它,以便我可以向它传递一些初始化数据?

【问题讨论】:

    标签: wcf


    【解决方案1】:

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

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

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

    您还可以选择创建自己的 ServiceHost 或自己的 ServiceHostFactory 来显式控制服务实例化。这将使您能够在创建时访问新的服务实例。不过,我会远离那个选项。不值得为您的场景付出努力。

    【讨论】:

    • 我发了这个问题后,我记得我以前做过类似的事情,忘记了。我已将设置文件添加到库项目中,然后将生成的 app.config 的相关部分复制到可执行项目中的真正 app.config 中。我要在这里试试这个。谢谢!
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多