servicestack,Asp.net Mvc 3,Wcf,Architecture,Windows Services,servicestack" /> servicestack,Asp.net Mvc 3,Wcf,Architecture,Windows Services,servicestack" />

Asp.net mvc 3 windows服务或IIS中的主机应用程序服务器?

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文档、从文件中提取大

我正在为我的客户启动一个新项目。它将是一种大型系统,具有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对此有很好的支持,如果注册了
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服务演示项目:

在同一ASP.NET应用程序中运行后台服务 如果使用,则可以在同一个ASP.NET Web应用程序中承载。ServiceStack对此有很好的支持,如果注册了
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服务演示项目: