写点什么

Helios:一个基于 OWIN 的运行于 IIS 上的 ASP.NET Web 托管框架

2014 年 3 月 28 日

微软发布了 Helios 项目,一个轻量级的基于 OWIN 的运行于 IIS 上的 Web 托管框架。

Helios 是微软继 Katana 之后,于去年夏天发布的另一个项目,通过提供一些可独立安装、使用和管理的,运行于实现了OWIN 规范的Web 托管服务的小组件,让.NET Web 开发者可以绕开ASP.NET/IIS 这个庞然大物。

ASP.NET 的弊病之一是包含在.NET Framework 中,与.NET 的发布周期捆绑在一起。后者几年才会发布一个主版本,并且受制于特定的测试和缺陷修复的过程。为了让 Web 工具的开发更加敏捷且更具响应性,ASP.NET 团队创建了大量略小的组件——ASP.NET MVC、ASP.NET Web API——它们不依赖于 System.Web.dll,具有更加快速的开发周期,能够及时地修复缺陷。不仅如此,开发者还能将这样的 Web 应用程序部署在自定义的 OWIN 托管服务或 Katana(一个参考的 OWIN 实现)上。

Helios 是一个运行于 IIS 上的 Web 运行时,但并不是完全成熟的微软 Web 服务器, Rick Strahl 解释道:

Helios 不使用 System.Web.dll,它直接挂(hook)到 IIS 的原生接口上,提供基本的 OWIN 接口和上下文语义。它完全运行于普通的 ASP.NET Http 运行时环境之外,绕开模块管道和默认的 ASP.NET 运行时处理……Helios 是引导自原生 IIS 的、轻量级短路版本的 Web 托管服务。请记住,尽管 IIS 和 ASP.NET 联系得十分紧密,但 IIS 内核本身是十分轻量的,并且完全运行于原生代码之上。只有在安装了 ASP.NET 模块或处理程序之后,才会与 ASP.NET 产生交互,并且这种交互与原生内核和原生模块比起来是相当慢的。

Helios 背后的理念是,基于 IIS 的成熟且功能丰富的环境(不包括遗留的 ASP.NET 附件),提供一个运行时。此外,如 ASP.NET 的安全工程师 Levi Broderick 所说,其目标是提供“高密度的 Web 服务器”,“模拟自托管多于模拟 Web 托管的行为”,以及“减少部署 Web 应用时的麻烦”。但是,它不会“对现有应用 100% 的兼容。特别是不支持.aspx 和.ashx 或其他 ASP.NET 相关的终结点”。

在开发时,Helios 要求以下环境:Windows 8 或 Windows Server 2012,.NET Framework 4.5.1,Visual Studio 2012 或 2013。Broderick 表示他们会在“未来的某个预览版中放宽这一要求”,可能会允许开发者使用 Windows 7 进行开发。Helios 应用程序可以部署在 Windows Azure 或任何拥有 Windows Server 2012、.NET Framework 4.5.1 且完全信任的托管环境中。

在性能方面,对于一个“Hello World”应用来说,Helios 的吞吐量比标准 ASP.NET 多 2-3 倍。但 Broderick 认为这并不能作为比较两种 Web 解决方案的基础,因为实际的应用程序要远比介绍性的应用复杂得多。但在内存占用方面, Helios 要比 System.Web 表现优秀:

在绝对数字方面来看,示例应用在 Helios 架构下可以达到 50000 个并发请求,与标准 ASP.NET 管道相比,能节省大约 1GB 的内存占用。由于示例应用设计时采用的是最小基线,因此我们有理由相信在其他复杂应用中,也能保持这个绝对数字。

需要注意的是,Broderick 在评论里提到,微软还没有提交 Helios:

如果人们实际上不需要 Helios,或者团队解散,或者有更好的想法,或者有其他想都想不到的各种理由,我们都可能停止工作并且不会发布它。我们可不想让它只能在 Azure 下工作。

开发者在安装了 Microsoft.Owin.Host.IIS 的 NuGet 包之后,就可以直接在 Visual Studio 里创建基于 Helios 的 ASP.NET 应用程序了。

原文英文链接: Project Helios: An ASP.NET OWIN-based Web Host Running on IIS

2014 年 3 月 28 日 20:499240
用户头像

发布了 59 篇内容, 共 18.6 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

UML学习笔记

Edison

UML

架构师训练营第 3 周作业

netspecial

极客大学架构师训练营

go语言设计的理解-工程化语言

superman

Java go 面向对象编程

一个草根的日常杂碎(10月1日)

刘新吾

随笔杂谈 生活记录 社会百态

区块链到底是什么?它为什么如此受人关注

CECBC区块链专委会

区块链 金融

架构师训练营 1 期第 3 周:代码重构 - 总结

piercebn

极客大学架构师训练营

AQS 都看完了,Condition 原理可不能少!

程序员小航

Java 源码 源码阅读 JUC Condition

架构师训练营—第三周作业

Geek_shu1988

极客时间 - 架构师一期 - 第三周作业

_

极客大学架构师训练营 第三周

架构师训练营 - 第三周总结

一个节点

极客大学架构师训练营

架构师训练营第 1 期 - 第三周课后练习

Anyou Liu

极客大学架构师训练营

智能的本质—DIKW结构

良少

学习 AI 智能 DIKW

互联网上正规平台的辨别方法?被AG黑网投黑钱拿回的技巧方案

InfoQ_6b6a6317a692

最完整的PyTorch数据科学家指南(1)

计算机与AI

学习 PyTorch

架构师训练营 - 第三周作业

一个节点

极客大学架构师训练营

架构师训练营第三周学习总结

吴传禹

极客大学架构师训练营

LeetCode题解:242. 有效的字母异位词,哈希表一次循环,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

LeetCode题解:242. 有效的字母异位词,哈希表两次循环,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

架构师训练营第一期 - 第三周课后 - 作业一

崔

极客大学架构师训练营

区块链12年:应用在了哪些领域?

CECBC区块链专委会

区块链 教育 金融 物流

为什么go中的receiver name不推荐使用this或者self

Gopher指北

go 后端

架构师训练营—第三周学习总结

Geek_shu1988

架构师训练营第三周作业

吴传禹

极客大学架构师训练营

架构师训练营第一期 - 第三周课后 - 作业二

崔

极客大学架构师训练营

【读书笔记二】《企业IT架构转型之道-阿里巴巴中台战略思想与架构实战》

Man

中台 分布式 研发管理

spring-boot-route(一)Controller接收参数的几种方式

Java旅途

Java Spring Boot

架構師訓練營第 1 期 - 第 02 周總結

Panda

架構師訓練營第 1 期

如何理解区块链行业的安全问题?

CECBC区块链专委会

区块链 人工智能 大数据

为啥你用@JsonFormat注解时,LocalDateTime会反序列化失败?

冰河

springboot LocalDateTime JsonFormat

第三周用组合设计模式编写程序

Geek_fabd84

Ui Automator 框架和Ui Automator Viewer你会用吗?附送「必备adb命令」拿走不谢 !

清菡

android

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

Helios:一个基于OWIN的运行于IIS上的ASP.NET Web托管框架-InfoQ