我正在尝试在同一站点的Windows Server 2019的IIS中托管两个应用程序。其中一个应用程序是Angular中的网站前端,另一个是ASP.NET MVC(.NET Core 2.2.8)中的网站API。
前端应用程序的URL为site_url/portal
,API的为site_url/api
。
在使用API的其他操作之前,必须使用Windows身份验证从site_url/api/identity
URL请求JSON Web令牌。
前端似乎工作正常,但是在质量控制环境中尝试到达site_url/api/identity
API会产生“ HTTP错误500.0-内部服务器错误”。
我在IIS中激活了详细的日志,事件查看器中的错误消息为“无法加载配置。异常消息:要求属性'processPath'。”
API的web.config文件确实具有进程路径:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\PortalAPI.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" forwardWindowsAuthToken="true"/>
</system.webServer>
</location>
</configuration>
另外,IIS错误页面显示了一些我觉得很奇怪的东西。请求网址正确,但物理路径为application_path\identity
。 “身份”是MVC控制器,而不是文件。
已安装.NET Core 2.2 Windows主机捆绑包并设置了.NET path环境变量。
应用程序池标识是应用程序用户,并且.NET CLR版本设置为“无托管代码”。
该站点同时启用了匿名身份验证(用于前端登录页面)和Windows身份验证。
问题是,我已经在开发环境和干净的Azure虚拟机中以完全相同的方式托管了应用程序,并且它们在这两种环境中均可工作,这使我认为这与IIS或质量控制机器本身。
有人知道这个问题和/或可能的解决方案是什么吗?
答案 0 :(得分:0)
一个丢失的配置导致了这个错误,直到我添加它:环境变量 ASPNETCORE_ENVIRONMENT
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\PortalAPI.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" >
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
</system.webServer>
您可以将它放在 web.config 中,但如果您从 Visual Studio 发布新版本的 Web 应用程序,它将被删除。为避免这种情况,请将其放在 applicationHost.config 中(与您的站点对应的位置)。