移动到不同的 IIS 服务器 pc 后在 IIS 中发布的 asp.net 核心 web api 给出错误 500.19 (0x8007000d)

Posted

技术标签:

【中文标题】移动到不同的 IIS 服务器 pc 后在 IIS 中发布的 asp.net 核心 web api 给出错误 500.19 (0x8007000d)【英文标题】:asp.net core web api published in IIS after moved to different IIS server pc gives error 500.19 (0x8007000d) 【发布时间】:2021-11-18 21:06:12 【问题描述】:

我使用 Visual Studio 2015 在 asp.net 核心版本 1.0.1 中开发了一个 web api,当我在开发它的同一台电脑的 IIS 10 中发布 web api 时,一切正常。当我将web api的发布文件夹复制并粘贴到不同的PC时出现问题,浏览器显示错误500.19 Internal Server Error,错误代码0x8007000d,“无法访问请求的页面,因为该页面的相关配置数据is invalid ",这会导致 web.config 中出现一些问题。 我认为 IIS 的版本不是问题,因为从 IIS 10 移动到 IIS 8 或从 IIS8 移动到 IIS 10 会出现相同的错误,并且在两台装有 IIS 10 的电脑之间也会发生同样的错误。 我已经查看了几个相关问题,例如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 中,直到现在它只能在开发的 pc 上正常工作。

【问题讨论】:

您是否在生产服务器上安装了 .NET Core 托管捆绑包并在之后重新启动它? 另外,在 web.config 中设置 stdoutLogEnabled="true" 可能有助于缩小问题范围。 放弃吧。在继续之前在 Visual Studio 2017 中重做一个项目,因为您使用的是过时的工具。 @ChrisPratt 我从 [aka.ms/dotnetcore-2-windowshosting] 安装了 .NET Core Windows Server Hosting 包并重新启动仍然得到相同的错误 500 Internal Server Error 有什么建议吗? @AperioOculus 我也尝试在我的 web.config 中设置stdoutLogEnabled="true",但问题仍然存在 【参考方案1】:

要获得更详细的错误消息:

    验证日志目录是否存在于 web 配置引用的路径中。如果没有,请创建它。配置中显示的路径会将“日志”目录放在已部署站点的根文件夹中。

    验证应用程序池是否具有对日志目录的写入权限,并且

    验证 `stdoutLogEnabled="true"。

如果您已经验证了所有这 3 个项目,那么您应该会获得包含更详细错误描述的日志条目

什么可能导致“500.19 内部服务器错误,错误代码 0x8007000d”错误?

.NET Core 托管捆绑包未安装在部署站点的 Web 服务器上。要解决此问题,请获取此下载 .NET Core Windows Server Hosting bundle 您可能还需要验证 dotnet 可执行文件的路径是否存在于部署计算机的环境变量中。要检查这一点,首先找到 dotnet.exe 的安装路径。它通常位于C:\Program Files\dotnetC:\Program Files (x86)\dotnet。知道路径后,请确保该路径存在于您的环境变量中。

控制面板 > 系统 > 高级系统设置 > 环境变量。突出显示“路径”,单击“编辑”并验证 dotnet 文件夹的路径是否存在。如果不是,请添加它。对用户变量和系统变量执行相同的操作。重新启动您的机器,然后重试。

【讨论】:

我给你一个支持只是为了找到托管包的下载链接。我看了又看,在任何地方的下载页面上都找不到。

以上是关于移动到不同的 IIS 服务器 pc 后在 IIS 中发布的 asp.net 核心 web api 给出错误 500.19 (0x8007000d)的主要内容,如果未能解决你的问题,请参考以下文章

iis 如何搭建url 重定向,实现无线端和pc端不同的跳转

IIS 中 asp.net 本地网站的权限

webservice 在vs调试没问题,可是发布后在IIS里面浏览,就连不上数据库了

如何将 Web 服务从 Visual Studio 发布到 IIS?

经典 ASP - 文件移动 IIS 的权限被拒绝

用IIS进行部署,发布网页,运行DEMO