C# 在iis上托管net core 2.0应用程序时出现内部服务器错误

C# 在iis上托管net core 2.0应用程序时出现内部服务器错误,c#,iis,.net-core,asp.net-core-2.0,C#,Iis,.net Core,Asp.net Core 2.0,我有一个.net核心web api应用程序,在本地主机上,它在iis express和默认iis上运行良好。在我的web服务器上,我希望将我的应用程序作为Asp.NETV4.0应用程序下的子应用程序托管。我已经创建了一个子应用程序并部署了我的核心应用程序,然后创建了一个no managed应用程序池,并为我的net core子应用程序选择了此应用程序池。我已经完全安装了.net core 2.0 windows主机包和.net core 2.0 SDK Web.config <?xml v

我有一个.net核心web api应用程序,在本地主机上,它在iis express和默认iis上运行良好。在我的web服务器上,我希望将我的应用程序作为Asp.NETV4.0应用程序下的子应用程序托管。我已经创建了一个子应用程序并部署了我的核心应用程序,然后创建了一个
no managed
应用程序池,并为我的net core子应用程序选择了此应用程序池。我已经完全安装了.net core 2.0 windows主机包和.net core 2.0 SDK

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=".\MyApp.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>
Program.cs

public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseIISIntegration()
                .UseStartup<Startup>()
                .Build();
公共静态IWebHost BuildWebHost(字符串[]args)=>
WebHost.CreateDefaultBuilder(args)
.Useii整合()
.UseStartup()
.Build();
所以,当我从api调用端点时,它返回500个内部服务器错误


尽管启用了我的stdoutlog,但没有创建任何日志文件,也看不到任何正确的事件日志

这里确实没有足够的内容来明确回答您的问题,但基于您将其作为ASP.NET 4应用程序下的虚拟应用程序托管的事实,最有可能的罪魁祸首是Web.config。Web.config文件由应用程序继承。因此,主应用程序(ASP.NET 4)Web.config中的任何内容,如果在子应用程序(ASP.NET核心应用程序)Web.config中没有明确定义不同,都会顺其自然,其中很可能有很多内容与ASP.NET核心应用程序不兼容

防止这种情况发生的唯一真正方法是编辑主应用程序的Web.config,并明确地将
inheritinchildaplications=“false”
添加到几乎每个配置部分。这必须针对每个部分单独进行;没有全局方法来禁用继承


不能保证有人不会用某些东西修改父Web.config并忘记将此属性添加到新部分,因此这也是一个非常脆弱的解决方案。一般来说,嵌套ASP.NET应用程序是个坏主意,嵌套ASP.NET核心应用程序更是个坏主意。我建议简单地给它自己的网站和托管在子域上。这样你的问题就少多了。

这里确实没有足够的信息来明确回答你的问题,但基于你将其作为ASP.NET 4应用程序下的虚拟应用程序托管的事实,最有可能的罪魁祸首是Web.config。Web.config文件由应用程序继承。因此,主应用程序(ASP.NET 4)Web.config中的任何内容,如果在子应用程序(ASP.NET核心应用程序)Web.config中没有明确定义不同,都会顺其自然,其中很可能有很多内容与ASP.NET核心应用程序不兼容

防止这种情况发生的唯一真正方法是编辑主应用程序的Web.config,并明确地将
inheritinchildaplications=“false”
添加到几乎每个配置部分。这必须针对每个部分单独进行;没有全局方法来禁用继承

不能保证有人不会用某些东西修改父Web.config并忘记将此属性添加到新部分,因此这也是一个非常脆弱的解决方案。一般来说,嵌套ASP.NET应用程序是个坏主意,嵌套ASP.NET核心应用程序更是个坏主意。我建议简单地给它自己的网站和托管在子域上。这样你就不会有太多问题了

尽管启用了我的stdoutlog,但没有创建任何日志文件

在事件查看器(Windows+R,键入eventvwr)中检查应用程序是否具有创建日志目录的权限(查看
Windows日志/Application

解决方法之一是在IIS中指定的部署目录中创建
logs
文件夹(根据
stdoutLogFile=“.\logs\stdout”
设置,与
Web.config
处于同一级别)

希望这将帮助您在日志中找到500错误的原因


编辑:您可以在发布过程中创建
日志
目录,如下所述

尽管启用了我的stdoutlog,但没有创建任何日志文件

在事件查看器(Windows+R,键入eventvwr)中检查应用程序是否具有创建日志目录的权限(查看
Windows日志/Application

解决方法之一是在IIS中指定的部署目录中创建
logs
文件夹(根据
stdoutLogFile=“.\logs\stdout”
设置,与
Web.config
处于同一级别)

希望这将帮助您在日志中找到500错误的原因



编辑:您可以在发布过程中创建
日志
目录,如所述

您是否查阅了《IIS配置、疑难解答提示和常见错误》一节?@MartinUllrich I按照本文档所述,关于将.net核心应用程序作为.net 4.0应用程序池下的子应用程序托管的信息非常有限,而此信息只是显示日志配置,我无法了解我所做的是否可行或如何克服我的错误。您是否查看了IIS配置,@MartinUllrich的“疑难解答提示和常见错误”部分,我按照本文档所说的做了,但是,关于将.net core应用程序作为.net 4.0应用程序池下的子应用程序托管的信息非常有限,而这些信息只是显示日志配置,我无法了解我所做的是否可行或如何克服错误。
public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseIISIntegration()
                .UseStartup<Startup>()
                .Build();