私は今完全に途方に暮れています...
私は.NETCore Webアプリを持っており、ローカルで実行するとすべてが機能しています。いくつかのWebAPIエンドポイントがあり、これらもすべてGET
で意図したとおりに機能し、JSONを正しく返します。
IISに公開すると、これらのエンドポイントの1つだけが機能を停止し、(failed) net:ERR_CONNECTION_RESET
をスローします(Chrome-他のブラウザーは独自のエラーをスローします)。
特徴的なのは、他のすべてのWeb API呼び出しがすべて同じ環境で機能し、同じコンテキストとEFデータサービスを使用して同じデータベースを呼び出していることです。
私が理解できないのは、Kestrelから他のログサービス(Windowsイベントビューア、テキストファイル、電子メールなど)に詳細なログを取得する方法です。私はロギングミドルウェアをあまり使用していません。本番環境に近づくにつれてそれを接続するつもりです。
.NET Core KestrelWebサーバーを使用するWindows2012R2の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>
ただし、基本的にコンソール出力をファイルにダムするため、少なくともコンソールロガーを有効にする必要があります。
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"
}
}
私も同様の問題を抱えていました。遅延読み込みを許可しないEntityFramework Core1.1を使用しています。私のエラーは、多対多の関係にあるオブジェクトグラフループが原因で発生しました。
EFCore 1.1はすぐに使用できる多対多をサポートしていないため、私のモデルにはループ参照がありました。 JSONシリアライザーは、コントローラークラスから返されたデータをシリアル化しようとしたときに、無限ループに陥りました。
この問題が発生し、他の解決策が機能しない場合は、Startup.csファイルのConfigureServices()
メソッドを変更することをお勧めします。行services.AddMvc();
は次のように変更する必要があります。
services.AddMvc()
.AddJsonOptions(options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);
組み込みのロギングミドルウェアを使用してKestrelをロギングできます。次のように、stdoutLogEnabledを介してweb.configでロギングが有効になっていることを確認します。
<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);
}
私はstartup.csに以下のコードを追加しました、そしてそれは働きました。
services.AddMvc()
.AddJsonOptions(options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);
Entity Framework Core(親子関係)で自己参照テーブルを使用していました。
編集Startup.csそしてこれを置き換えます:services.AddMvc()
を:
services.AddMvc().AddJsonOptions(y => y.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);
私はこれが回答済みとしてマークされていることを知っていますが、上記のどれも私にはうまくいきませんでした。私にとっての解決策は、Webプロジェクトをdotnet core 2.1から2.2に更新し、dotnet coreSDKも更新することでした。