科比骂林书豪,qqsecure,人交配全过程
kestrel
kestrel 是一个跨平台的适用于 asp.net core 的 web 服务器,默认包括在 asp.net core 项目模板中。
kestrel 支持以下方案:
可以单独使用 kestrel,也可以将其与反向代理服务器 (如 internet information services (iis)、nginx 或 apache)结合使用。 反向代理服务器接收来自网络的 http 请求,并将这些请求转发到 kestrel。
kestrel 用作边缘(面向 internet)web 服务器:
kestrel 用于反向代理配置:
实例
为了看起来更加简单直接,这里我们使用vs code新建一个asp.net core的web应用,并使用kestrel作为服务器。
首先需要在计算机上安装.net core环境。这里可以查看 。本例中使用的是.net core 3.1。
在一个目录下打开命令窗口,输入命令:
dotnet new webapp -o myapp
这样,就使用默认模板新建了一个项目。如果是首次安装使用.net core,还需要信任证书:
dotnet dev-certs https --trust
此时,这个项目可以直接运行:
cd myapp dotnet watch run
此时就是以内置的kestrel作为服务器直接运行的。我们修改一下代码,查看一下运行时的进程,修改pages/index.cshtml如下:
@page @using system.diagnostics @model indexmodel @{ viewdata["title"] = "home page"; } <div class="text-center"> <h1 class="display-4">welcome</h1> <p> "@process.getcurrentprocess().processname" </p> <p>learn about <a href="https://docs.microsoft.com/aspnet/core" rel="external nofollow" >building web apps with asp.net core</a>.</p> </div>
运行程序我们看到:
此时的进程名称就是我们的应用名称。接下来我们以这个代码为基础,分别看看其他托管模式中的情况。
iis
在iis中托管asp.net core应用需要asp.net core 模块。
asp.net core 模块是插入 iis 管道的本机 iis 模块,用于:
在进程内托管时,该模块会使用 iis 进程内服务器实现,即 iis http 服务器 (iishttpserver)。
在进程外托管时,该模块仅适用于 kestrel。 该模块无法与 http.sys 一起工作。
进程内托管
asp.net core 应用默认为进程内托管模型。在进程内托管时,使用 iis http 服务器 (iishttpserver) 而不是 kestrel 服务器。
实例
代码还是与之前相同的代码,首先将代码发布一下:
dotnet publish --configuration release
接下来将publish文件夹中的文件托管到iis中。
要在iis中托管asp.net core网站,首先要安装.net core 托管捆绑包安装程序 ,安装后重启电脑或在命令行中执行:
net stop was /y
之后执行:
net start w3svc
然后在iis中新建网站,并将根目录指向上一步中的publish文件夹,浏览网站可以看到:
此时进程名称为:w3wp。这就是默认的进程内托管模式。
进程外托管
进程外托管使用 kestrel 服务器,而不是 iis http 服务器 (iishttpserver)。
若要配置进程外托管应用,请在项目文件 ( .csproj) 中将 属性的值设置为 outofprocess:
<propertygroup> <aspnetcorehostingmodel>outofprocess</aspnetcorehostingmodel> </propertygroup>
process.getcurrentprocess().processname 报告w3wp/iisexpress(进程内)或 dotnet(进程外)。
实例
修改myapp.csproj文件:
<project sdk="microsoft.net.sdk.web"> <propertygroup> <targetframework>netcoreapp3.0</targetframework> <aspnetcorehostingmodel>outofprocess</aspnetcorehostingmodel> </propertygroup> <itemgroup> </itemgroup> </project>
之后重新发布并部署到iis,查看网站可以看到:
此时的进程名称为:dotnet,这是进程外托管模式。
http.sys
如果 asp.net core 应用在 windows 上运行,则 http.sys 是 kestrel 的替代选项。 为了获得最佳性能,通常建议使用 kestrel。
http.sys仅能在windows上运行,且不能与asp.net core模块同时使用。在不想使用iis或者需要使用kestrel不具有的功能时可以使用http.sys。
http.sys 支持以下功能:
实例
修改代码program.cs如下:
//using microsoft.aspnetcore.server.httpsys; public static ihostbuilder createhostbuilder(string[] args) => host.createdefaultbuilder(args) .configurewebhostdefaults(webbuilder => { webbuilder.usehttpsys(options => { options.allowsynchronousio = true; options.authentication.schemes = authenticationschemes.none; options.authentication.allowanonymous = true; options.maxconnections = null; options.maxrequestbodysize = 30000000; options.urlprefixes.add("http://localhost:5005"); }); webbuilder.usestartup<startup>(); });
在命令行中输入运行应用。
dotnet watch run
此时就是以http.sys方式托管,此时进程名也是myapp。
但是这种方式不能托管在iis中,如果将发布的代码放到iis中则会报错。
总结
综上所述,kestrel是一个跨平台的服务器,http.sys则只能用于windows中。kestrel与http.sys都是嵌入在asp.net core中的服务器,它们有点类似于springboot中内嵌的tomcat。
即使不使用额外的web服务器,例如iis,nginx,apache等,项目最终生成的文件也可以直接运行,并提供http服务,不过,一般推荐的形式是,使用kestrel作为应用服务器,使用常用的web服务器(nginx,apache等)作为反向代理。
在iis中,官方提供了asp.net core模块,方便了将asp.net core应用托管于iis中,并提供了两种模式,其工作方式也类似于反向代理。在windows中,对于某些kestrel不支持的功能,则可以使用http.sys。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
asp.net搭建博客,使用BlogEngine.NET+MySql搭建博客
网友评论