36

我不确定它是否可能,但我希望在 WCF 服务启动后立即运行一个函数以生成初始缓存数据。我现在不担心如何实现缓存,我的问题严格来说是在服务启动时运行该功能。该服务将是 RESTful 的。

该服务最终将托管在 IIS 中并使用 .Net Framework 4.5

4

3 回答 3

36

最简单的方法是App_Code在 WCF 项目根目录下创建一个文件夹,创建一个类(我会调用它,Initializer但没关系。重要的部分是方法名称),如下所示:

public class Initializer
{
    public static void AppInitialize()
    {
        // This will get called on startup
    } 
}

更多信息AppInitialize可以在这里找到。

于 2012-05-31T21:40:23.377 回答
33

@KirkWoll 建议的方法有效,但前提是您在 IIS 中并且这是 App_Code 下唯一的 AppInitialize 静态方法。如果您想在每个服务的基础上进行初始化,如果您有不同的 AppInitialize 方法或者如果您不在 IIS 下,您还有以下其他选项:

自定义工厂的示例如下所示:

public class MyFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        ServiceHost host = base.CreateServiceHost(serviceType, baseAddresses);
        host.Opening += new EventHandler(host_Opening);
        return host;
    }

    void host_Opening(object sender, EventArgs e)
    {
        // do initialization here
    }
}

}

于 2012-05-31T21:55:47.403 回答
1

就我而言,我确实喜欢下面。我有托管 WCF Rest 服务的 Windows 服务项目。我在我的 Windows 服务项目 MyService.cs 中编写了以下代码

protected override void OnStart(string[] args)
{
    try
      {
        ServiceHost myServiceHost = new ServiceHost(typeof(myservice));
        myServiceHost.Opening += OnServiceHostOpening;
        myServiceHost.Open();
      }
      catch (Exception ex)
      {
         //handle exception
      }
}

private void OnServiceHostOpening(object sender, EventArgs e)
{
   //do something
}
于 2020-01-29T21:40:54.230 回答