通常我会考虑编写Windows服务来管理不适合托管在Web应用程序中的任务.这些类型的任务通常是长时间运行的进程或计划任务.虽然这通常是这些类型任务的主要方法,但人们已经开始研究在Web应用程序中运行这些后台进程的方法,方法是在Global.asax公开的Application_Start事件中启动许多线程.这种方法的问题一直是,如果你的IIS工作进程死了,那么你的后台线程也会被杀死(实际上你的'Windows服务'会被停止,直到收到下一个请求).
ASP .NET 4.0提供了解决此问题的方法.您现在可以将StartMode设置为'AlwaysRunning',如Scott Gu 在此博客文章中所述.某处在这个帖子上的评论,有人问一个有关IIS托管的Windows服务类型的任务,因为新的功能,保证了工作进程始终运行的可行性问题.斯科特提到它肯定会支持这种情况.除此之外,最近推出的AppFabric意味着Microsoft本身正在提供简单的钩子来托管和监控Web应用程序中的WCF和WF服务.
对于我们这些曾经编写Windows服务来支持我们的网络应用程序的人来说,这意味着什么?我们应该采用这种模式吗?有什么陷阱?据我所知,在Web应用程序中托管"Windows服务"流程有很多好处,最有用的是易于部署.此外,我们实际上可以开始为我们的服务开发简单的用户界面,这些界面提供有关运行时发生的事情的信息.
如果我不得不走这条路,我认为我不会在面向客户的Web应用程序中托管我的"Windows服务"类型功能.我可能会开发一个新的Web应用程序项目(很像我将在Windows服务上下文中),它将托管我的长时间运行/计划任务进程.我想这个原因很少.
我会听到关于这种做法是否我应该使用Windows服务来坚持你的想法很感兴趣.我很想尝试这种新方法.
我在Windows 8开发盒上发生了一个奇怪的问题.在比较运行Kentico的ASP .NET应用程序和控制台应用程序(均在.NET 4.0上运行)时,以下代码行为NumberFormat.NumberDecimalSeparator生成两个不同的值.
var culture = new System.Globalization.CultureInfo("en-ZA");
var separator = culture.NumberFormat.NumberDecimalSeparator;
Run Code Online (Sandbox Code Playgroud)
分离器的价值:
我的区域设置的正确输出是句点.
这怎么可能?当我第一次选择十进制数字的格式化问题时,我认为它可能是一个Kentico错误,但是此测试表明不是这样.对于特定区域设置,CultureInfo的新实例如何返回跨应用程序不同的实例?