在WCF上运行一个函数启动

Sma*_*ode 32 .net c# rest wcf

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

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

car*_*ira 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
    }
}
Run Code Online (Sandbox Code Playgroud)

}


Kir*_*oll 31

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

public class Initializer
{
    public static void AppInitialize()
    {
        // This will get called on startup
    } 
}
Run Code Online (Sandbox Code Playgroud)

更多相关信息AppInitialize,可以发现在这里.

  • 是的,实际上它需要IIS. (5认同)
  • 我发现这是一个糟糕的选择.包含'AppInitialize'的模块不是使用项目编译的,而是作为'content'提供的,并在加载服务时动态编译.因此,正确实现IOC所需的许多库都不可用(例如System.Reflection).虽然我同意需要单个初始化方法,但这个解决方案非常受限于它是动态编译的事实. (2认同)