我不确定它是否可能,但我希望在 WCF 服务启动后立即运行一个函数以生成初始缓存数据。我现在不担心如何实现缓存,我的问题严格来说是在服务启动时运行该功能。该服务将是 RESTful 的。
该服务最终将托管在 IIS 中并使用 .Net Framework 4.5
最简单的方法是App_Code
在 WCF 项目根目录下创建一个文件夹,创建一个类(我会调用它,Initializer
但没关系。重要的部分是方法名称),如下所示:
public class Initializer
{
public static void AppInitialize()
{
// This will get called on startup
}
}
更多信息AppInitialize
可以在这里找到。
@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
}
}
}
就我而言,我确实喜欢下面。我有托管 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
}