在iis上托管net core 2.0 app会导致内部服务器错误

时间:2017-12-27 10:18:41

标签: c# iis .net-core asp.net-core-2.0

我有一个.net核心web api应用程序,在localhost上它在iis express和default iis上运行良好。在我的Web服务器上,我想在Asp.Net v4.0应用程序下托管我的应用程序作为子应用程序。我创建了一个子应用程序并部署了我的核心应用程序,然后创建了一个no managed应用程序池,并为我的net core子应用程序选择了这个应用程序池。我已经完全安装了.net core 2.0 windows hosting bundle和.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>

StartUp课程'Configure方法

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory logger)
{
    logger.AddFile(Configuration.GetValue<string>("LogPath"));
    app.UseDeveloperExceptionPage();
    app.UseDatabaseErrorPage();
    // Enable middleware to serve generated Swagger as a JSON endpoint.
    app.UseSwagger();

    // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.), specifying the Swagger JSON endpoint.
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "MyAppV1");
    });


    app.UseMvc();
    //app.UseMiddleware<LoggingMiddleWare>();
}

Program.cs的

public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseIISIntegration()
                .UseStartup<Startup>()
                .Build();

因此,当我从api调用端点时,它返回500内部服务器错误。

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

2 个答案:

答案 0 :(得分:2)

这里真的不足以明确回答你的问题,但基于你在ASP.NET 4应用程序下托管它作为虚拟应用程序的事实,最可能的罪魁祸首是Web.config。 Web.config文件由应用程序继承。因此,您的主应用程序(ASP.NET 4)Web.config中的任何内容(在您的子应用程序(ASP.NET核心应用程序)Web.config中未明确定义)都会出现,并且非常可能在那里与ASP.NET核心应用程序不兼容。

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

无法保证有人不会使用某些内容修改父Web.config,也忘记将此属性添加到新部分,因此这也是一个非常脆弱的解决方案。一般来说,嵌套ASP.NET应用程序是一个坏主意,嵌套ASP.NET Core应用程序更糟糕。我建议简单地给它自己的网站并托管在子域名上。通过这种方式你可以获得更少的问题。

答案 1 :(得分:0)

  

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

检入事件查看器(Windows + R,键入eventvwr),以确定该应用程序是否有权创建日志目录(在Windows Logs / Application中查找)。

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

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


编辑:您可以按照here

的说明在发布过程中创建logs目录