[Blazor] - 关于 "HTTP Error 500.38 - ANCM Application DLL Not Found" 的调整及相关资料
须知少年凌云志,曾许人间第一流。这篇文章主要讲述[Blazor] - 关于 "
HTTP Error 500.38 - ANCM Application DLL Not Found"
的调整及相关资料相关的知识,希望能为你提供帮助。
背景
发布并部署一个 Blazor Wasm 应用到 IIS
问题
发布时如果选择了 Product single file,会得到
HTTP Error 500.38 - ANCM Application DLL Not Found 的错误
文章图片
原因分析
HTTP Error 500.38 ANCM 找不到应用程序 DLL
https://docs.microsoft.com/zh-cn/aspnet/core/test/troubleshoot-azure-iis?view=aspnetcore-3.1#50038-ancm-application-dll-not-found
ANCM 找不到应用程序 ANCM,该内容应显示在可执行文件的旁边。
在使用进程内托管模型托管打包为单文件可执行程序的应用。该进程内模型要求 ANCM 将 .NET Core 应用加载到现有 IIS 进程中。
单文件部署模型不支持此方案。
调整方案
请在应用的项目文件中使用下述方法之一来修复此错误:
https://docs.microsoft.com/zh-cn/aspnet/core/test/troubleshoot-azure-iis?view=aspnetcore-3.1#50038-ancm-application-dll-not-found
- 通过将 PublishSingleFile MSBuild 属性设置为 false 来禁用单文件发布。
- 通过将 AspNetCoreHostingModel MSBuild 属性设置为 OutOfProcess 来切换到进程外托管模型。
https://confluence.softwell.ru/display/KBNav/HTTP+Error+500.38+-+ANCM+Application+DLL+Not+Found
Option 1: In the web.config app file, remove hostingModel "inprocess" option
Option 2: Use the IIS app build
文章图片
什么是ANCM?
ANCM = ASP.NET Core Module
https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-3.1
【[Blazor] - 关于 " HTTP Error 500.38 - ANCM Application DLL Not Found" 的调整及相关资料】ASP.NET Core 模块是插入 IIS 管道的本机 IIS 模块,用于:
- 在 IIS 工作进程 (
w3wp.exe
) 内托管 ASP.NET Core 应用,称为进程内托管模型。 - 将 Web 请求转发到运行 Kestrel 服务器的后端 ASP.NET Core 应用,称为进程外托管模型。
- Windows 7 或更高版本
- Windows Server 2008 R2 或更高版本
IISHttpServer
)。在进程外托管时,该模块仅适用于 Kestrel。
该模块无法与 HTTP.sys 一起工作。
关于 .Net Core 进程内 (InProcess) 托管 和 进程外 (out-of-Process) 托管
https://www.cnblogs.com/51net/p/12765127.html
当一个 ASP.NET Core 应用程序执行的时候,.NET 运行时会去查找 Main()方法,因为它是这个应用程序的起点。
然后,Main()方法调用静态类WebHost中的静态方法CreateDefaultBuilder()用于配置和设置 Web 服务器。
ASP.NET Core 应用程序可以托管在进程内(InProcess)或进程外(OutOfProcess)中。
- 进程内(InProcess)托管
- 进程外(out-of-Process)托管
- 什么是 Kestrel
https://www.cnblogs.com/Wddpct/p/6123660.html
ASP.NET Core 模块 (ANCM) 让你能够在 IIS 之后运行 ASP.NET Core 应用,IIS 和 Kestrel 各司其职,前者专于安全性,可管理性等方面,后者专于性能,我们从两种技术中都能获得益处。ANCM 只和 Kestrel 协同工作,它不兼容于 Weblistener。
ASP.NET Core的Kestrel服务器
https://www.cnblogs.com/Wddpct/p/6123653.html
Kestrel 是一个基于 libuv 的跨平台 ASP.NET Core web 服务器,libuv 是一个跨平台的异步 I/O 库。
ASP.NET Core 模板项目使用 Kestrel 作为默认的 web 服务器。
Kestrel支持以下功能:
- HTTPS
- 用于启用不透明升级的WebSockets
- 位于nginx之后的高性能Unix sockets
ASP.NET Core的几种托管方式
https://juejin.im/post/5deda204518825125015e40a
Kestrel
Kestrel 是一个跨平台的适用于 ASP.NET Core 的 Web 服务器,默认包括在 ASP.NET Core 项目模板中。
IIS
在 IIS 中托管 ASP.NET Core 应用需要 ASP.NET Core 模块。
安装 .NET Core Windows Hosting Bundle 扩展。
https://dotnet.microsoft.com/download/dotnet-core/thank-you/runtime-aspnetcore-3.1.3-windows-hosting-bundle-installer
文章图片
进程内托管
ASP.NET Core 应用默认为进程内托管模型。在进程内托管时,使用 IIS HTTP 服务器 (IISHttpServer) 而不是 Kestrel 服务器。
进程外托管
进程外托管使用 Kestrel 服务器,而不是 IIS HTTP 服务器 (IISHttpServer)。
HTTP.sys
如果 ASP.NET Core 应用在 Windows 上运行,则 HTTP.sys 是 Kestrel 的替代选项。 为了获得最佳性能,通常建议使用 Kestrel。
HTTP.sys仅能在Windows上运行,且不能与ASP.NET Core模块同时使用。在不想使用IIS或者需要使用Kestrel不具有的功能时可以使用HTTP.sys。
总结
综上所述,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。
推荐阅读
- git,es的基本查询,组合查询,mapping映射,i分词,term和match
- 理解并测试什么是Android事件分发
- multipart/form-data和application/x-www-form-urlencoded的区别
- Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting
- NetCore+Dapper WebApi架构搭建(仓储的依赖注入)
- Android应用的persistent属性
- 安卓测试
- RichFaces rich(fileUpload组件用法)
- 安卓逆向14.Nexus 5 线刷官方镜像root开始系统调试