C# Webservice/WCF(计时器更新引擎)
我正在尝试构建(csharp)一个webservice/WCF引擎,它可以执行两个操作:C# Webservice/WCF(计时器更新引擎),c#,web-services,wcf,C#,Web Services,Wcf,我正在尝试构建(csharp)一个webservice/WCF引擎,它可以执行两个操作: 有一个计时器(线程),每10-10分钟运行一次,请求在一个数据库中更新一些信息(与其他服务器连接以获取一些信息状态)。(这必须是自动的,并且没有可用的人工操作)。其思想是Web服务自动(10x10分钟)用最新的信息状态更新数据库 一种从一个数据库获取一些信息的服务方法。(这是一种在有人请求时提供信息的简单方法)。此方法将负责从数据库中选择状态信息 问题在于第一步,因为第二步非常简单 有谁能帮我,提供一些想法
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();
}
}
单一责任原则建议您将这两项责任分为两项服务。一个(Windows服务)将处理计时器。第二个是WCF服务,它将具有查询数据库和返回数据的单一操作 这些是独立的功能,应该独立实施
此外,我建议不要依赖IIS或
应用程序启动
和类似方法。这将阻止您的WCF服务托管在WAS或其他环境中。请记住,WCF比ASMXWeb服务灵活得多。它不限制您托管服务的位置。在对自己的服务设置此类限制之前,您应该仔细考虑。首先感谢您的回答!是IIS中的一个webapp(webservice)。该行动(第1点)在本项目中非常重要。我必须避免并尝试获得最佳解决方案,以避免性能不佳或停止服务。同一Web服务向所有300台服务器请求一些信息(x分钟内x分钟-使用套接字请求信息),并用作向客户端应用程序提供更新信息的服务。我需要使用System.Threading.Timer,但我必须找到最好的解决方案。你知道我应该在这里用什么图案吗?你的文章中有什么好的信息吗?谢谢,我需要在Web服务中使用System.Threading.Timer,但我必须找到最好的解决方案。状态信息来自300多个不同的服务器。我必须集中(使用套接字请求信息)每个10-10分钟。感谢您针对WCF webapp/webservice场景给出了答案,并给出了一些示例code@James:默认配置是否包含ASP.NET兼容性?再次感谢James提供的示例代码;D我们需要有两点可用(1-定时器请求信息;2-提供一种从一个数据库获取信息的服务方法)。为了避免性能问题,我认为我们应该并且需要使用一个不同的线程来隔离这个计时器。你认为呢?John,你是对的,但在这种情况下,我们需要在同一个web服务中承担这两项责任。也许你可以指出更多的原则或模式,我们需要在这个特殊的情况下使用。谢谢你告诉我其他的解决方案(模式、想法等),让我记住我需要在同一个web服务中承担这两个职责?@RBFIGUERA:你还没有说为什么它们需要在同一个服务中。就像我说的,我理解你的观点,但前提是所有的功能都在web上,不依赖Windows,通过web进行更多的控制。我们在Java(Web服务)中有很多这样的服务。这是一个dotnet项目,我们必须使用dotnet。谢天谢地,另一个好处是我们可以在基于参数的多个web应用程序上重用相同的“引擎”。