仅在IIS .NET的核心Web API调用ERR_CONNECTION_RESET - 其它呼叫工作

问题描述 投票:6回答:6

我现在是在一个完全丧失...

我有一个.NET核心的Web应用程序,并在本地运行一切正常。有许多的WebAPI终点,又都按预期与GET并正确返回JSON工作。

当我发布到IIS,一个,只有这些端点的一个停止工作,并抛出(failed) net:ERR_CONNECTION_RESET(在Chrome - 其他浏览器中抛出自己的错误)。

什么是奇特的是,所有其他Web API调用的工作,都在相同的环境和调用同一个数据库,使用相同的背景和EF数据服务。

我想不通,是如何从红隼详细的日志到一些其他的日志服务,无论是Windows事件查看器,文本文件,电子邮件或其他任何东西!我没有用太多的日志中间件,并打算钩住了,因为我们更接近生产。

什么是尝试和与.NET核心Kestrel的Web服务器上的Windows 2012 R2中的IIS 8解决此最好的方法是什么?

c# asp.net iis asp.net-web-api asp.net-core
6个回答
4
投票

只需编辑你的web.config并设置stdoutLogEnabled="true"to真,以及设置在日志文件将被写入的路径。

<?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="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
  </system.webServer>
</configuration>

但是,你需要至少启用控制台记录器,因为它基本上在dumbs控制台输出到文件中。

public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();
    ...
}

的“记录”部被配置在appsettings.json,如

  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }

12
投票

我有一个类似的问题。我使用实体框架的核心1.1,不允许延迟加载。我的错误是从在一个多到多的关系的对象图环路引起的。

作为EFCore 1.1不支持多到许多开箱即用,我的模型有循环引用。我的JSON序列成为停留在一个无限循环,因为它试图从序列化我的控制器类返回的数据。

如果你有这个问题,并没有其他的解决方案的工作,我建议改变你的Startup.cs文件ConfigureServices()方法。该生产线services.AddMvc();应改为如下:

services.AddMvc()
    .AddJsonOptions(options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);

1
投票

您可以使用内置的日志记录中间件红隼。确保日志记录在web.config中通过stdoutLogEnabled启用,像这样:

<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">

而你startup.cs包含以下代码:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(LogLevel.Trace);
}

0
投票

编辑Startup.cs和替换这样的:services.AddMvc()有:

services.AddMvc().AddJsonOptions(y => y.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);

0
投票

我在startup.cs添加下面的代码和它的工作。

services.AddMvc()
    .AddJsonOptions(options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);

我用的是实体框架的核心(父子关系)自引用表。


0
投票

我知道这已经被标记为回答,但以上都不是为我工作。对我来说,解决办法是从更新的dotnet核2.1的Web项目2.2和更新DOTNET核心SDK为好。

© www.soinside.com 2019 - 2024. All rights reserved.