我不确定它是否可行,但是我想在启动WCF服务以生成初始缓存数据时立即运行函数。我现在不担心如何实现缓存,我的问题是严格关于在服务启动时运行该函数。该服务将是RESTful。
该服务最终将在IIS中托管并使用.Net Framework 4.5
答案 0 :(得分:32)
@KirkWoll提出的建议是有效的,但前提是你在IIS中并且这是App_Code下唯一的AppInitialize静态方法。如果要基于每个服务进行初始化,如果您有不同的AppInitialize方法,或者如果您不在IIS下,则可以使用以下其他选项:
ServiceHost.Open()
,以便您可以在此处初始化自定义工厂的示例如下所示:
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
}