Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET核心Web api调用错误\u连接\u仅在IIS上重置-其他调用正常_C#_Asp.net_Iis_Asp.net Web Api_Asp.net Core - Fatal编程技术网

C# .NET核心Web api调用错误\u连接\u仅在IIS上重置-其他调用正常

C# .NET核心Web api调用错误\u连接\u仅在IIS上重置-其他调用正常,c#,asp.net,iis,asp.net-web-api,asp.net-core,C#,Asp.net,Iis,Asp.net Web Api,Asp.net Core,我现在完全不知所措 我有一个.NET核心web应用程序,在本地运行,一切正常。这里有许多WebAPI端点,同样,所有这些端点都按照预期使用GET并正确返回JSON 当我发布到IIS时,这些端点中只有一个停止工作,并抛出(失败)net:ERR\u CONNECTION\u RESET(在Chrome中,其他浏览器抛出自己的错误) 奇怪的是,所有其他Web API调用都在工作,都在相同的环境中,使用相同的上下文和EF数据服务调用相同的数据库 我搞不懂的是,如何将Kestrel的详细日志输入到其他一些

我现在完全不知所措

我有一个.NET核心web应用程序,在本地运行,一切正常。这里有许多WebAPI端点,同样,所有这些端点都按照预期使用
GET
并正确返回JSON

当我发布到IIS时,这些端点中只有一个停止工作,并抛出
(失败)net:ERR\u CONNECTION\u RESET
(在Chrome中,其他浏览器抛出自己的错误)

奇怪的是,所有其他Web API调用都在工作,都在相同的环境中,使用相同的上下文和EF数据服务调用相同的数据库

我搞不懂的是,如何将Kestrel的详细日志输入到其他一些日志服务中,比如Windows事件查看器、文本文件、电子邮件或其他任何东西!我没有使用太多的日志中间件,目的是在我们接近生产时将其连接起来


使用.NET core Kestrel web服务器在Windows 2012 R2上的IIS 8中尝试解决此问题的最佳方法是什么?

只需编辑web.config并将
stdoutLogEnabled=“true”
设置为true,以及将日志文件写入的路径

<?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>
“Logging”部分在appsettings.json中配置,例如

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

您可以使用内置的日志记录中间件记录Kestrel。确保通过stdoutLogEnabled在web.config中启用日志记录,如下所示:

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

我也有类似的问题。我使用的是EntityFrameworkCore1.1,它不允许延迟加载。我的错误是由多对多关系中的对象图循环引起的

由于EFCore 1.1不支持多对多开箱即用,因此我的模型有循环引用。我的JSON序列化程序在尝试序列化从控制器类返回的数据时陷入无限循环

如果您有此问题,而其他解决方案都不起作用,我建议更改Startup.cs文件
ConfigureServices()
方法。行
services.AddMvc()应更改为:

services.AddMvc()
    .AddJsonOptions(options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);
编辑Startup.cs并将其替换为:
services.AddMvc()

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

我已经在startup.cs中添加了下面的代码,并且成功了

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

我在实体框架核心(父子关系)中使用自引用表

我知道这已被标记为已回答,但以上所有内容都不适用于我。对我来说,解决方案是将web项目从dotnet core 2.1更新到2.2,并同时更新dotnet core SDK。

\logs\stdout
路径是根目录,然后是logs\stdout?这将记录所有错误?是的,这取决于您在
AddConsole
中配置的内容。您还可以使用
AddDebug
将内容记录到VisualStudio的输出选项卡中(当然,仅在调试期间,意味着连接了调试器时)@RemarlLima-请参阅我的答案,loggerFactory.AddConsole(LogLevel.Trace);将向您显示来自Kestrel的所有日志消息,不仅仅是错误通过IConfiguration override您可以过滤并禁用来自名称空间的消息您不感兴趣Toso您有什么问题吗?对我来说,结果是返回的对象有一个循环引用,即
Quotes->Site
Site->List
,因此
JSON
解析器抛出了一个错误-但仅在prod环境中。我更改了方法以返回一个更简单的模型,而不返回引用,并且它工作正常。对我来说,是(在线)数据库数据的差异导致了错误。是数据的序列化导致了错误吗?如果这个答案确实为您解决了这个问题,请检查导致问题的方法是否返回了正确类型的对象(例如某种类型的简单DTO,而不是DbSet本身!)。
services.AddMvc().AddJsonOptions(y => y.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);
services.AddMvc()
    .AddJsonOptions(options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);