01、NetCore2.0优化之Web服务器 与 IIS解耦
在Asp.Net Core 2.0中,是如何实现跨平台的?不使用IIS了,在linux上的WebServer是什么?

------------------------------------------------------------------------------------------------------------

写在前面:这是一个系列的文章,总目录请移步:NetCore2.0技术文章目录

------------------------------------------------------------------------------------------------------------

 
一、历史问题
ASP.NET Core出现之前,ASP.NET应用的Web服务器都是IIS。它强依赖于IIS,不具有扩展性;又因为IIS只有Windows版本,没有如Linux等版本,造成了ASP.NET Web应用只能运行在Windows操作系统上。
 
二、OWIN规范的出现
OWIN(Open Web Interface fro .NET),这个规范定义了一组接口,用来解耦Web服务器和Web应用程序。它规范和定义了Web服务器和Web应用程序之间的相互调用关系。也就是说,只要实现了OWIN接口的Web服务器都可以支持ASP.NET Web应用程序的运行了。
OWIN规范的详细情况可访问:http://owin.org/
 
三、ASP.NET Core默认提供的Web服务器
目前实现了OWIN接口的WEB服务器有很多,比如Katana、Kestrel等。ASP.NET Core默认提供的WEB服务器是Kestrel,它是跨平台的,可以运行在Linux或者Windows操作系统上。
 
四、ASP.NET Core 2.0下的Web服务器使用姿势
  • 经典模式
使用Kestrel做SelfHost(自宿主)模式:Kestrel 没有安全、缓存等功能,因此不应该把 Kestrel 暴露到公网。
      
  • 反向代理模式
也可以使用 IIS、Nginx 做反向代理服务器:反向代理收到Http Request后,经过预处理后,再转发给 Kestrel,由反向代理服务器进行缓存、安全等处理。
      
 
  五、在代码中指定Kestrel为WebServer
 1 using Microsoft.AspNetCore.Hosting;
2
3 namespace MyWeb
4 {
5 class Program
6 {
7 static void Main(string[] args)
8 {
9 var host = new WebHostBuilder()
10 .UseKestrel() // 指定WebServer为Kestrel
11 .UseStartup<StartUpB>() // 配置WebHost
12 .Build();
13
14 host.Run(); // 启动WebHost
15 }
16 }
17 }
注:UserXXX是现在很流行的用法,一般是底层提供了一个插件框架(依赖倒置DI),并约定了一些接口规范,上层根据需要实现这些接口规范,通过UseXXX的方式注册到插件框架中。参考:05、NetCore2.0插件框架之Web应用启动流程源码初窥

01、NetCore2.0优化之Web服务器 与 IIS解耦的更多相关文章

  1. ASP.NET 4.0尚未在 Web 服务器上注册 解决方法

    使用VS2010创建web应用程序时出现如下提示ASP.NET 4.0尚未在 Web 服务器上注册.为了使网站正确运行,可能需要手动将 Web 服务器配置为使用 ASP.NET 4.0,按 F1 可了 ...

  2. Win10 兼容性 Visual studio web应用程序 ASP.NET 4.0 尚未在 Web 服务器上注册

    系统升级到windows10 ,Visual studio 创建web应用程序时出现如下提示ASP.NET 4.0尚未在 Web 服务器上注册.为了使网站正确运行,可能需要手动将 Web 服务器配置为 ...

  3. Windows 10 下ASP.NET4.0尚未在Web服务器上注册

    系统换成Win10后,打开VS2012出现如下问题: 网上查找了,大部分都是 C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319 并管理员运行aspnet_ ...

  4. 在IIS7.5上添加.NET4.0程序的虚拟目录时提示ASP.NET 4.0尚未在 Web 服务器上注册

    使用VS2010创建web应用程序时出现如下提示: ASP.NET 4.0尚未在 Web 服务器上注册. 解决方法: 首先IIS应用程序池添加 net framework4.0版本. 接着找到C:\W ...

  5. 02、NetCore2.0优化之Nuget包

    02.NetCore2.0优化之Nuget包 在NetCore2.0中的包是如何管理的?如何存储的?微软做了哪些优化工作? -------------------------------------- ...

  6. ASP.NET 4.0尚未在 Web 服务器上注册

    ASP.NET 4.0尚未在 Web 服务器上注册 解决方法 使用VS2010创建web应用程序时出现如下提示ASP.NET 4.0尚未在 Web 服务器上注册.为了使网站正确运行,可能需要手动将 W ...

  7. 解决Win10 中打开VS2012 出现“ASP.NET 4.0 尚未在 Web 服务器上注册”

    系统升级为win10后,在使用vs2012打开原来的项目时,会出现“ASP.NET 4.0 尚未在 Web 服务器上注册”的问题,如图: 想到在win8.1系统下,也出现过同样的问题,就直接使用命令提 ...

  8. IISExpress.无法启动IIS Express Web 服务器.Starting IIS Express... IIS Express is running

    x 提示: 无法启动IIS Express Web 服务器. 来自IIS Express的输出: Starting IIS Express... IIS Express is running 总结: ...

  9. win7下.NET 2.0未在web服务器上注册的问题(转)

    转自:http://blog.sina.com.cn/s/blog_6d15b547010192hx.html 电脑装了win7操作系统,装上vs2008后运行dotnetnuke项目后出现" ...

随机推荐

  1. 部署在eclipse上的Tomcat上的publish和clean的区别

    publish:就是把自己的web应用发布到tomcat服务器上没这样才能通过浏览器查看浏览 clean: 就是先清除掉原先编译到tomcat上的程序(多个.class文件),之后再发布. 如:我建了 ...

  2. IT外包一定要按着程序流程做

    步骤1: 衡量外包对你的公司是否有意义.在分析是否需要将你的工作进行外包的阶段,对本公司现有的业务做好基准调查以判定它们在多大程度上符合行业标准.或许,自行开展离岸业务--在其他地区建立离岸IT资源更 ...

  3. Spring Boot 定时任务的使用

    @Configuration @EnableScheduling public class ScheduleConfig { private final Logger logger = LoggerF ...

  4. Java集合:TreeMap源码剖析

    一.概念 TreeMap是基于红黑树结构实现的一种Map,要分析TreeMap的实现首先就要对红黑树有所了解. 要了解什么是红黑树,就要了解它的存在主要是为了解决什么问题,对比其他数据结构比如数组,链 ...

  5. c#多线程,进度条,实时给前台发送数据

    ///做了一个wpf多线程,在实际场景中利用多线程保证程序不会卡死,性能上有所提高 //启动线程处理                Thread thread1 = new Thread(Update ...

  6. linux下文件的复制、移动与删除命令为:cp,mv,rm

    一.文件复制命令cp    命令格式:cp [-adfilprsu] 源文件(source) 目标文件(destination)    cp [option] source1 source2 sour ...

  7. UWP 使用Windows.Media.FaceAnalysis.FaceDetector检测人脸

    话说现在检测人脸的技术有很多.有在线AI服务,比如Megvii Face++,Microsoft Cognitive Services,Tencent AI等等.还有本地的库实现的,比如OpenCV. ...

  8. W班-项目选题报告成绩

    作业链接 https://edu.cnblogs.com/campus/fzu/FZUSoftwareEngineering1715W/homework/907 作业要求 1份团队选题报告(word电 ...

  9. [Android FrameWork 6.0源码学习] View的重绘ViewRootImpl的setView方法

    博客首页:http://www.cnblogs.com/kezhuang/p/ 本篇文章来分析一下WindowManager的后续工作,也就是ViewRootImpl的setView函数的工作 /i* ...

  10. Python入门代码练习

    一.循环猜年龄程序,猜错三次则打印提示信息并退出循环,猜对也打印提示信息并退出循环 count=0while count < 3: num = input("猜年龄游戏:") ...