2017-01-05 86 views
4

我現在是在一個完全喪失...只在IIS .NET的核心Web API調用ERR_CONNECTION_RESET - 其它呼叫工作

我有一個.NET核心的Web應用程序,並在本地運行一切正常。還有一些WebAPI端點,同樣按照預期工作,並且正確返回JSON。

當我發佈到IIS時,只有一個終止點停止工作並拋出(failed) net:ERR_CONNECTION_RESET(在Chrome中 - 其他瀏覽器拋出自己的錯誤)。

什麼是奇特的是,所有其他Web API調用的工作,都在相同的環境和調用同一個數據庫,使用相同的背景和EF數據服務。

我想不出什麼,是如何從紅隼詳細的日誌到一些其他的日誌服務,無論是Windows事件查看器,文本文件,電子郵件或其他任何東西!我沒有使用過很多日誌記錄中間件,因爲我們正在接近生產,所以我們打算把它跟上去。

在Windows 2012 R2上,使用.NET核心Kestrel Web服務器在IIS 8中嘗試排除此問題的最佳方法是什麼?

+1

那麼,什麼是你的問題? –

+0

對我來說,它最終返回的對象有一個循環引用,即'引號 - >站點'和'站點 - >列表'所以'JSON'解析器拋出一個錯誤 - 但只在產品環境中。我改變方法來返回一個沒有返回引用的簡單模型,它的工作原理 – RemarkLima

+1

謝謝,對我來說,這是導致錯誤的(在線)數據庫數據的差異。 –

回答

2

只要編輯你的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> 

但是,你需要至少啓用控制檯記錄器,因爲它基本上在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" 
    } 
    } 
+0

並且'。\ logs \ stdout'路徑是根目錄,然後記錄\ stdout?這記錄了所有的錯誤? – RemarkLima

+0

是的,取決於你在'AddConsole'中配置的內容。你也可以使用'AddDebug'來將這些東西記錄到Visual Studio的Output Tab中(當然在調試的時候,意味着調試器被連接) – Tseng

+0

@RemarlLima - 請參閱我的回答,loggerFactory.AddConsole(LogLevel.Trace);將顯示來自Kestrel的所有記錄的消息,而不僅僅是錯誤 – Ross

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); 
} 
8

我也有類似的問題。我正在使用實體框架核心1.1,它不允許延遲加載。我的錯誤是由多對多關係中的對象圖循環造成的。

由於EFCore 1.1不支持多對多開箱即用,所以我的模型具有循環引用。我的JSON序列化器陷入了無限循環,因爲它試圖序列化從我的控制器類返回的數據。

如果你有這個問題,並沒有其他的解決方案的工作,我建議改變你的Startup.cs文件ConfigureServices()方法。該生產線services.AddMvc();應改爲這樣:

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

編輯Startup.cs和替換這樣的:services.AddMvc()有:

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