首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >windows服务或IIS中的主机应用程序服务器?

windows服务或IIS中的主机应用程序服务器?
EN

Stack Overflow用户
提问于 2012-09-22 04:08:08
回答 2查看 1K关注 0票数 0

我正在为我的客户开始新的项目。它将是一种具有web UI (许多用户)+桌面UI (少数用户)的大系统。

我想知道。我应该在Windows服务或IIS中承载我的所有逻辑吗?

应用程序可以在后台执行许多操作(导入、导出、为报表准备数据)。web客户端(ASP.NET MVC)和桌面客户端(以及其他客户端)将通过ServiceStack/WCF连接到我的服务。

EN

回答 2

Stack Overflow用户

发布于 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服务器主线程因任何原因被终止,它将启动该主线程:

代码语言:javascript
复制
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服务演示项目:

票数 2
EN

Stack Overflow用户

发布于 2012-09-22 04:15:09

我有:

从WCF服务访问的业务逻辑(http、tcp,无论您的需求是什么)

Windows服务用于多线程或非多线程的繁重后台任务(解析巨大的xml文档,从文件中提取大数据,耗时的系统集成等)。)

处理通过http请求和响应的轻后台任务的UI (使用WCF、使用asp.net服务或执行UI内容)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12537521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档