我正在尝试构建一个webservice /WCF引擎,它可以执行两个操作:
问题是第一步,因为第二步非常容易。
谁能帮我,用一些想法或一些代码,如何第一步。任何模式都应该在这里使用?
发布于 2010-08-10 10:12:01
因为它是一个webapp (例如,VS2010中的“”项目类型),所以您可以连接到应用程序事件。
默认情况下,该项目模板类型不会创建Global.asax,因此您需要“添加新项”并选择“”(如果您已经拥有一个Global.asax,FWIW),它将不可用。
然后,您只需使用应用程序上的开始和结束事件来启动和停止您的计时器,如下所示:
public class Global : System.Web.HttpApplication
{
private static readonly TimeSpan UpdateEngineTimerFrequency = TimeSpan.FromMinutes(10);
private Timer UpdateEngineTimer { get; set; }
private void MyTimerAction(object state)
{
// do engine work here - call other servers, bake cookies, etc.
}
protected void Application_Start(object sender, EventArgs e)
{
this.UpdateEngineTimer = new Timer(MyTimerAction,
null, /* or whatever state object you need to pass */
UpdateEngineTimerFrequency,
UpdateEngineTimerFrequency);
}
protected void Application_End(object sender, EventArgs e)
{
this.UpdateEngineTimer.Dispose();
}
}
发布于 2010-08-11 04:33:07
单一责任原则建议将这两个责任分成两个服务。一个( Windows服务)将处理定时器。第二个是WCF服务,它只有一个操作来查询数据库并返回数据。
这些都是独立的功能,应该独立实施。
此外,我建议不要依赖于IIS或Application_Start
以及类似的方法。这将防止您的WCF服务托管在WAS或其他环境中。请记住,WCF比ASMX web服务灵活得多。它并不限制您服务的宿主位置。在你对自己的服务设置这样的限制之前,你应该仔细考虑。
https://stackoverflow.com/questions/3447266
复制相似问题