什么是Kestrel Web服务器以及它与IIS/IIS Express的关系?
我来自在IIS Express上开发应用程序并在IIS Web服务器上托管它们.使用ASP.NET Core我依赖于Microsoft.AspNetCore.Server.Kestrel
我的启动.UseServer("Microsoft.AspNetCore.Server.Kestrel")
.但是当我运行我的网站时,我仍然在系统托盘中获得IIS Express图标.有人问我是否使用IIS Express或Kestrel,我不知道该说些什么!
我没有任何跨平台要求,因为我在PC上开发并在Azure中托管,所以我很困惑,如果我甚至是need
Kestrel,但它似乎没有替代品 - 即使最简单的样本也使用Kestrel.
我已经将我的c#,asp.net 5,mvc 6应用程序部署到了Windows 2008服务器上.我已经启动dnx web
它正在侦听端口5000并且从本地计算机访问时工作正常.
如何让它听取非本地主机请求?
PS这个问题并不重复......当hosting.ini实际上有.ini格式时,它指的是asp.net pre RC1.现在,它是JSON,我找不到任何实际应该包含在其中的文档.
PPS真正的解决方案是对链接问题的未接受答案,并提出了一个重要的警告.脚步:
dnx web
- 它会失败dnu restore
我有一个.NET Core应用程序.它在VS2017和Kestrel的本地运行.它在IIS下本地运行.但是,在服务器上,它无法以502.5 - Process Failure
消息开头.
在事件日志中,我得到更多细节:
具有物理根'C:...\my-app-folder \'的应用程序'...'无法使用命令行'"dotnet"启动进程.\ MyApp.dll',ErrorCode ='0x80004005:80008083.
该应用程序的早期版本在同一台服务器上运行良好,唯一的区别是它们是使用VS2017RC(2&3)发布的,这是第一次使用完全发布的VS2017.
什么ErrorCode = '0x80004005 : 80008083.
意思?
我如何解决它?
iis .net-core kestrel-http-server asp.net-core visual-studio-2017
因此,随着ASP.NET Core 2.1的出现,Kestrel现在会自动在HTTP端创建一个HTTPS端点,并且默认项目模板设置为从HTTP重定向到HTTPS(这很容易撤消).
但是我的问题是......如何为我的项目完全禁用HTTPS.我已经阅读了文档,并使用了各种HTTPS配置设置,但我做的任何事情似乎都不允许我将其关闭并只运行HTTP项目.
我疯了还是只是错过了什么.我希望这很容易做到.
虽然Node.js确切地说它使用了一个事件循环,但我似乎无法找到Kestrel的情况,或者它是否利用像IIS这样的线程池/请求队列?
?????????????????????????
??>? timers ?
? ?????????????????????????
? ?????????????????????????
? ? I/O callbacks ?
? ?????????????????????????
? ?????????????????????????
? ? idle, prepare ?
? ????????????????????????? ?????????????????
? ????????????????????????? ? incoming: ?
? ? poll ?<?????? connections, ?
? ????????????????????????? ? data, etc. ?
? ????????????????????????? ?????????????????
? ? check ?
? ?????????????????????????
? ?????????????????????????
???? close callbacks ?
?????????????????????????
Run Code Online (Sandbox Code Playgroud) 使用dnx运行我的ASP.NET核心应用程序我能够从命令行设置环境变量,然后像这样运行它:
set ASPNET_ENV = Production
dnx web
Run Code Online (Sandbox Code Playgroud)
在1.0中使用相同的方法:
set ASPNETCORE_ENVIRONMENT = Production
dotnet run
Run Code Online (Sandbox Code Playgroud)
不起作用 - 该应用程序似乎无法读取环境变量.
Console.WriteLine(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"));
Run Code Online (Sandbox Code Playgroud)
返回null
我错过了什么?
如何在Visual Studio 2017中为项目启用SSL?
在VS15中,我可以选择Project - > Properties - > Debug - > Enable SSL.VS2017中不提供此选项.它搬到了哪里?
编辑:
我甚至尝试过编辑.\vs\config\applicationhost.config
无济于事:
<listenerAdapters>
<add name="http" />
<add name="https" />
</listenerAdapters>
<sites>
<site name="WebSite1" id="1" serverAutoStart="true">
<application path="/">
<virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
</application>
<bindings>
<binding protocol="http" bindingInformation=":8080:localhost" />
</bindings>
</site>
<site name="Filters" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="c:\Users\Ashley\documents\visual studio 2017\Projects\Filters\src\Filters" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:51107:localhost" />
<binding protocol="https" bindingInformation="*:43107:localhost" />
</bindings>
</site>
<siteDefaults>
<logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
<traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
</siteDefaults> …
Run Code Online (Sandbox Code Playgroud) 我目前正在使用ASP.NET Core 2.x,我曾经能够让Kestrel使用HTTPS/SSL,只需将其放入UseUrls()
方法中即可:
var host = new WebHostBuilder()
.UseUrls("http://localhost", "https://111.111.111.111")
.UseKestrel()
.Build();
Run Code Online (Sandbox Code Playgroud)
但现在我得到了例外:
System.InvalidOperationException:
HTTPS endpoints can only be configured using KestrelServerOptions.Listen().
Run Code Online (Sandbox Code Playgroud)
如何配置Kestrel在ASP.NET Core 2.x中使用SSL?
TL; DR:为什么aspnet核心应用程序在Docker镜像中的端口80上运行,但在docker镜像之外运行5000.
阐述
我浏览了这里的aspnet核心/ docker教程:https: //docs.microsoft.com/en-us/dotnet/core/docker/building-net-docker-images
在页面的一半,我按照规定启动应用程序:
dotnet run
Run Code Online (Sandbox Code Playgroud)
除此之外,这打印这个:
Now Listening on: http://localhost:5000
Run Code Online (Sandbox Code Playgroud)
大.这就是我的预期.本教程的下一步是从Docker镜像中启动完全相同的应用程序.
docker build -t aspnetapp .
docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
Run Code Online (Sandbox Code Playgroud)
这导致了
Now listening on: http://[::]:80
Run Code Online (Sandbox Code Playgroud)
等待.笏?为什么aspnet核心应用程序在端口80上运行?当我直接从机器运行它时,它在端口5000上运行.没有配置文件更改.
我怀疑它与基本的docker图像有关,但是在docker中还不够熟练以跟踪它.