我正在为我的客户开始新的项目。它将是一种具有web UI (许多用户)+桌面UI (少数用户)的大系统。
我想知道。我应该在Windows服务或IIS中承载我的所有逻辑吗?
应用程序可以在后台执行许多操作(导入、导出、为报表准备数据)。web客户端(ASP.NET MVC)和桌面客户端(以及其他客户端)将通过ServiceStack/WCF连接到我的服务。
发布于 2012-09-22 06:43:13
在同一ASP.NET应用程序中运行后台服务
如果您使用ServiceStack,则可以在同一个ASP.NET Web应用程序中托管Web service APIs and Background Services。ServiceStack为这个故事提供了一些很好的支持,如果你注册了一个IMessageService,所有的OneWay异步HTTP调用都会自动延迟并发布到注册的MQ服务(例如,对于Redis MQ,请求OneWay会在服务MQ收件箱中发布)。
在不同的ASP.NET应用程序中运行后台服务
由于使用ASP.NET应用程序部署ASP.NET主机比使用Windows Services更容易,因此在StackOverflow Careers,我们选择将BackOffice服务拆分到单独的ASP.NET Web应用程序中(这不是公开可用的)。
对于单向消息,面向互联网的求职网站将请求DTO放入Redis,后者由ServiceStack's Redis MQ Server处理。对于正常的应答服务,我们能够重用请求DTO,并使用其中一个typed C# Service Clients直接调用ServiceStack Web服务。
使用ServiceStack的好处之一是built-in Messaging API能够重用您现有的Web服务,因此我们能够获得advantages of messaging,而不必开发特定的仅MQ服务。
确保MQ服务始终在运行
由于在ASP.NET主机中运行后台线程的易失性较高,因此我们在Global.asax中添加以下代码,以便在每个请求的末尾调用mqHost.Start(),如果MQ服务器主线程因任何原因被终止,它将启动该主线程:
protected void Application_EndRequest(object sender, EventArgs e)
{
//If the MQ Host goes down for whatever reason, restart it
if (appHost == null) return;
var mqHost = appHost.TryResolve<IMessageService>();
if (mqHost != null)
mqHost.Start();
}这通常是No-Op,但如果主后台线程由于任何原因被终止,它将再次启动它。
在Windows服务中运行后台服务
运行Windows Service可能是后台服务的理想环境,因为它不会受到AppDomain重启和ASP.NET请求限制的影响。部署和调试Windows服务比较困难,而且它们不是跨平台的,所以除非需要,否则我通常会避免使用它们。但如果你想走这条路,你应该看看ServiceStack的Windows服务演示项目:
发布于 2012-09-22 04:15:09
我有:
从WCF服务访问的业务逻辑(http、tcp,无论您的需求是什么)
Windows服务用于多线程或非多线程的繁重后台任务(解析巨大的xml文档,从文件中提取大数据,耗时的系统集成等)。)
处理通过http请求和响应的轻后台任务的UI (使用WCF、使用asp.net服务或执行UI内容)
https://stackoverflow.com/questions/12537521
复制相似问题