在WCF上运行一个函数启动

时间:2012-05-31 21:37:50

标签: c# .net wcf rest

我不确定它是否可行,但是我想在启动WCF服务以生成初始缓存数据时立即运行函数。我现在不担心如何实现缓存,我的问题是严格关于在服务启动时运行该函数。该服务将是RESTful。

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

3 个答案:

答案 0 :(得分:32)

@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
    }
}

}

答案 1 :(得分:31)

最简单的方法是在WCF项目根目录下创建一个App_Code文件夹,创建一个类(我称之为Initializer但是没关系。重要的是方法名称)像这样:

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

可以找到有关AppInitialize的更多信息here

答案 2 :(得分: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
}