Asp.net mvc 3 windows服务或IIS中的主机应用程序服务器?
我正在为我的客户启动一个新项目。它将是一种大型系统,具有web用户界面(很多,很多用户)+桌面用户界面(很少用户) 我在想。我应该在Windows服务或IIS中承载我的所有逻辑吗 应用程序可以在后台执行许多操作(导入、导出、为报表准备数据)。web客户端(ASP.NET MVC)和桌面客户端(以及其他客户端)将通过/WCF与我的服务连接。我会: 从WCF服务访问的业务逻辑(http、tcp,无论您的需求是什么) Windows服务是否用于多线程的繁重后台任务(解析巨大的xml文档、从文件中提取大数据、耗时的系统集成等) UI处理通过http请求和响应的浅背景任务(使用asp.net mvc使用WCF服务或执行UI操作)我做: 从WCF服务访问的业务逻辑(http、tcp,无论您的需求是什么) Windows服务是否用于多线程的繁重后台任务(解析巨大的xml文档、从文件中提取大数据、耗时的系统集成等) UI处理通过http请求和响应的轻度后台任务(使用asp.net mvc使用WCF服务或执行UI操作)在同一asp.net应用程序中运行后台服务 如果使用,则可以在同一个ASP.NET Web应用程序中承载。ServiceStack对此有很好的支持,如果注册了Asp.net mvc 3 windows服务或IIS中的主机应用程序服务器?,asp.net-mvc-3,wcf,architecture,windows-services,
servicestack,Asp.net Mvc 3,Wcf,Architecture,Windows Services,
servicestack,我正在为我的客户启动一个新项目。它将是一种大型系统,具有web用户界面(很多,很多用户)+桌面用户界面(很少用户) 我在想。我应该在Windows服务或IIS中承载我的所有逻辑吗 应用程序可以在后台执行许多操作(导入、导出、为报表准备数据)。web客户端(ASP.NET MVC)和桌面客户端(以及其他客户端)将通过/WCF与我的服务连接。我会: 从WCF服务访问的业务逻辑(http、tcp,无论您的需求是什么) Windows服务是否用于多线程的繁重后台任务(解析巨大的xml文档、从文件中提取大
IMessageService
,所有单向异步HTTP调用都会自动延迟并发布到已注册的MQ服务(例如,对于Redis MQ,请求DTO会发布到服务MQ收件箱)
在不同的ASP.NET应用程序中运行后台服务
由于ASP.NET主机的部署使用ASP.NET应用程序比使用Windows服务更容易,因此我们选择将BackOffice服务拆分为单独的ASP.NET Web应用程序(该应用程序不公开)
对于单向消息,面向互联网的职业网站会将请求DTO放入Redis中,Redis将由进行处理。对于正常的回复服务,我们可以重用请求DTO,并直接使用其中一种方法调用ServiceStack Web服务
使用ServiceStack的好处之一是能够重用您现有的Web服务,因此我们能够获得,而无需开发特定的仅MQ服务
确保MQ服务始终运行
由于在ASP.NET主机中运行后台线程的易变性稍高,因此我们在Global.asax中添加此选项,以便在每个请求结束时调用mqHost.Start()
,如果MQ服务器主线程因任何原因被终止,该请求将启动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();
}
受保护的无效应用程序\u EndRequest(对象发送方,事件参数e)
{
//如果MQ主机因任何原因停机,请重新启动它
if(appHost==null)返回;
var mqHost=appHost.TryResolve();
if(mqHost!=null)
mqHost.Start();
}
这通常不是Op,但如果主后台线程因任何原因被终止,它将重新启动它
在Windows服务中运行后台服务
运行Windows服务可能是后台服务的理想环境,因为它不受AppDomain重新启动和ASP.NET请求限制。部署和调试Windows服务比较困难,而且它们不是跨平台的,所以除非需要,否则我通常会避免使用它们。但是,如果您想走这条路,您应该查看ServiceStack的Windows服务演示项目:
IMessageService
,所有单向异步HTTP调用都会自动延迟并发布到已注册的MQ服务(例如,对于Redis MQ,请求DTO会发布到服务MQ收件箱)
在不同的ASP.NET应用程序中运行后台服务
由于ASP.NET主机的部署使用ASP.NET应用程序比使用Windows服务更容易,因此我们选择将BackOffice服务拆分为单独的ASP.NET Web应用程序(该应用程序不公开)
对于单向消息,面向互联网的职业网站会将请求DTO放入Redis中,Redis将由进行处理。对于正常的回复服务,我们可以重用请求DTO,并直接使用其中一种方法调用ServiceStack Web服务
使用ServiceStack的好处之一是能够重用您现有的Web服务,因此我们能够获得,而无需开发特定的仅MQ服务
确保MQ服务始终运行
由于在ASP.NET主机中运行后台线程的易变性稍高,因此我们在Global.asax中添加此选项,以便在每个请求结束时调用mqHost.Start()
,如果MQ服务器主线程因任何原因被终止,该请求将启动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();
}
受保护的无效应用程序\u EndRequest(对象发送方,事件参数e)
{
//如果MQ主机因任何原因停机,请重新启动它
if(appHost==null)返回;
var mqHost=appHost.TryResolve();
if(mqHost!=null)
mqHost.Start();
}
这通常不是Op,但如果主后台线程因任何原因被终止,它将重新启动它
在Windows服务中运行后台服务
运行Windows服务可能是后台服务的理想环境,因为它不受AppDomain重新启动和ASP.NET请求限制。部署和调试Windows服务比较困难,而且它们不是跨平台的,所以除非需要,否则我通常会避免使用它们。但是,如果您想走这条路,您应该查看ServiceStack的Windows服务演示项目: