预期结果:
IIS正确托管了我的应用程序,当我导航到应用程序的网址(例如blabla / swagger)时,我看到了描述我的应用程序的大方UI
问题:
当我尝试导航至我的应用时,它会显示:
HTTP Error 500.19 - Internal Server Error
The requested page cannot be accessed because the related configuration data for the page is invalid.
信息
我在.net core 2.0中构建了一个应用程序,并且能够使其在由Kestrel托管的visual studio中运行。 但是,我需要将此应用程序部署到其他服务器,并且由于Kestrel不支持主机名,因此我需要将其托管在IIS中。当我通过Kestrel运行它时,我能够正确访问它,并导航到url / swagger地址,就能看到描述该应用程序的正确的swagger页面。 我的应用程序正在从Visual Studio中发布。这意味着在其已发布文件夹中,该应用程序需要所有dll。它被发布为依赖框架的应用程序,而不是独立的应用程序,但这没关系。
如何重现问题
由于我需要将这一天托管在Docker容器内的IIS中,所以我试图使其通过Powershell脚本托管在IIS中。我要做的就是将其托管在IIS中:
New-Website -Name 'myTestApp' -force -Port 8080 -PhysicalPath
'C:\Users\myUser\Desktop\Docker\PublishOutput' -ApplicationPool 'MyAppPoolTest'
其中 C:\ Users \ myUser \ Desktop \ Docker \ PublishOutput 是Visual Studio在其中发布应用程序的已发布文件夹的路径。预先感谢!
编辑:
这是Visual Studio在发布时生成的web.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\Friss.CaseApi.Web.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
<!--ProjectGuid: 313d542d-7676-4440-ae1b-22c6071f4309-->
错误页面是:
错误2:
答案 0 :(得分:1)
由于错误代码为0x80070005
,并且配置错误为“由于权限不足而无法读取配置文件”,因此应授予IIS_IUSRS
文件夹的PublishOutput
权限。
在IIS上从用户文件夹(C:\Users\someone
)托管文件内容而忘记授予此类权限是一个典型的错误。
有关IIS问题的其他典型ASP.NET Core,请阅读my blog post。