我正在编写一个可以自行托管OWIN WebApi Web服务的Windows服务。要启动Web服务,位置非常明显;在OnStart
的{{1}}方法 - 扩展类:
ServiceBase
但是,我不确定在哪里处理网页应用。在this example project中,他们使用private IDisposable _webApiDataConnectionHost;
protected override void OnStart(string[] args) {
_webApiDataConnectionHost = WebApp.Start<OwinWebStartup>("...");
}
方法处理它:
OnStop
但是,如果这是protected override void OnStop()
{
if(_server != null)
{
_server.Dispose();
}
base.OnStop();
}
,那么在服务的IDisposable
方法覆盖中处置它是否正确?如下所示:
Dispose
哪个处理网络应用的适当位置?
答案 0 :(得分:1)
我通常设置任何服务的方式是实现IDisposable接口并从OnStop调用Dispose方法。我的OnStop通常与我的OnPause相同,并附加调用Dispose。您可以看到msdn here的建议。
答案 1 :(得分:0)
Dispose()
,则该收藏可能会在之后非确定地发生。Dispose()
中正确地调用OnStop()
就行了。 如果我正确地获取了它,那么您在服务的覆盖Dispose()
中编写的代码只是确保当实例被垃圾收集时, all 资源将被释放。使用该方法,您可以确保在发生任何情况下正确发生处置。您仍然需要在OnStop()
中调用此覆盖方法。
* Do I need to dispose a web service reference in ASP.NET?
* Remarks on Disposing ServiceBase - 在Kent Cooper的回答中也有链接。