我有一个.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已启用,但没有创建任何日志文件,也看不到任何正确的事件日志。
答案 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
目录