当将已发布在IIS上的ASP.NET Core Web API移动到不同的IIS服务器电脑时,会出现500.19(0x8007000d)错误。

4
我在使用Visual Studio 2015开发了一个ASP.NET Core版本1.0.1的Web API。当我将该Web API发布到同一台PC上的IIS 10中时,一切都能正常工作。但是,当我将Web API的发布文件夹复制到另一台PC上时,浏览器会显示错误500.19 Internal Server Error,错误代码为0x8007000d,“由于页面相关的配置数据无效,所以无法访问请求的页面”,这表明web.config存在某些问题。我认为IIS版本不是问题所在,因为从IIS 10迁移到IIS 8或从IIS 8迁移到IIS 10都会出现相同的错误,并且在两台安装IIS 10的PC之间也会出现相同的错误。我已经查看了许多相关问题,例如The element 'system.webServer' has invalid child element 'aspNetCore'和其他与web.config文件相关的问题,它们似乎都能找到错误。开发环境中的web.config文件如下:
<?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <!--
    Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
    -->
     <system.webServer>
      <handlers>
       <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
      </handlers>
      <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
     </system.webServer>
    </configuration>

发布 Web API 后,web.config 文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!--
    Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
  -->
 <system.webServer>
  <handlers>
   <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
  </handlers>
  <aspNetCore processPath="dotnet" arguments=".\buildingSecureWebApi.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />
 </system.webServer>
</configuration>

无论在哪台电脑上发布,此web.config文件内容相同。

关于我问题的解决方案,需要将Web API安装在任何版本的Windows上,但到目前为止,它只能在开发的计算机上正常工作。


3
你在生产服务器上安装了.NET Core运行时捆绑包并重新启动了吗? - Chris Pratt
另外,在你的 web.config 中设置 stdoutLogEnabled="true" 可能有助于缩小问题范围。 - AperioOculus
放弃吧。在继续之前,重新使用Visual Studio 2017中的工具重做项目,因为你正在使用过时的工具。 - Lex Li
@ChrisPratt 我从[https://aka.ms/dotnetcore-2-windowshosting]安装了.NET Core Windows Server Hosting捆绑包并重新启动,但仍然出现相同的错误500 Internal Server Error。有什么建议吗? - Mig
@AperioOculus 我也尝试在我的web.config中设置stdoutLogEnabled="true",但问题仍然存在。 - Mig
1个回答

12
为了获得更详细的错误信息:
  1. 验证web.config中引用的路径下是否存在日志目录,如果不存在,则创建它。在您的配置中显示的路径将把“logs”目录放置在部署站点的根文件夹中。

  2. 确认应用程序池对日志目录具有写入权限,并

  3. 确认`stdoutLogEnabled="true"`。

如果您已验证了这三个项目,则应该会得到包含更详细错误描述的日志条目。

什么原因会导致“500.19 Internal Server Error,error code 0x8007000d”错误?

  • Web服务器上没有安装.NET Core托管捆绑包。为了解决此问题,获取此下载.NET Core Windows Server Hosting bundle
  • 还可以验证部署机器环境变量中是否存在 dotnet 可执行文件路径。要检查此项,请首先找到 dotnet.exe 安装的路径。通常位于 C:\Program Files\dotnetC:\Program Files (x86)\dotnet 中。一旦你知道路径,请确保路径存在于 Environment Variables 中。

控制面板 > 系统 > 高级系统设置 > 环境变量。选中“Path”,点击 “编辑”,并验证 dotnet 文件夹的路径是否存在。如果不存在,则添加它。对用户变量和系统变量都执行此操作。重启您的计算机,然后再试一次。


我给你点赞,因为你找到了托管捆绑包的下载链接。我已经找了很久,但在下载页面上无论如何都找不到它。 - Christopher Painter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接