2016-07-28 161 views
1

我有一個外部託管網站和一個託管在本地網絡上的ASP.NET(Framework 4.5.2)Web API 2。外部網站通過單擊API按鈕發出GET請求,該API查詢MSSQL數據庫並返回JSON以在頁面上顯示數據。該Web API目前託管在運行IIS 10的Windows 10框中。Web API 2和IIS 10 - 偶發性ERR_CONNECTION_RESET

我已經通過NuGet控制檯安裝了Miscrosoft.AspNet.Cors包,並通過將此代碼片段添加到Web.config文件中來啓用CORS:

<add name="Access-Control-Allow-Origin" value="*" /> 

除了這段程式WebApiConfig.cs:

config.EnableCors();  

網站完美的作品時,我的Web API託管在同一網絡上。我在外部網絡上遇到問題。偶爾,我收到ERR_CONN_RESET(Chrome)和「網絡連接丟失」(Safari)。當我打開新的瀏覽器並導航到該網站時,該錯誤似乎更頻繁地發生。點擊幾下按鈕後,錯誤停止並且頁面正常工作。如果我直接導​​航到web api端點,則會遇到類似的行爲。 錯誤是零星的,這使得這個問題非常難以排除故障。 FailedRequest跟蹤不會創建日誌,因爲請求沒有將其發送到服務器。在IIS中,我嘗試將應用程序池的啓動模式更改爲「始終運行」,並且也沒有任何運氣就啓用了32位應用程序。 有什麼可以導致這個問題的想法?在什麼時候我可以排除我的代碼,CORS配置和IIS配置?我傾向於這是一個網絡問題,但我們的網絡管理員確信問題在我的最終。任何幫助將不勝感激。這個問題已經吃光了整個星期,我即將把我的頭髮拉出來!

+1

看起來不像CORS錯誤,因爲通常CORS錯誤會建議啓用CORS或從同一個域進行調用。如果您確定請求未達到IIS,則可以檢查http.sys日誌(C:\ Windows \ System32 \ LogFiles \ HTTPERR)並根據說明檢查https://support.microsoft.com/en-in/kb/820729。也可能是網絡錯誤,如防火牆阻止。你在小提琴的痕跡中看到了什麼? –

+0

執行一個提琴手跟蹤並獲得504錯誤,指示CORS頭被從HTTP頭中剝離。這可能是由防火牆造成的嗎? – user2486993

+0

您可以添加完整的提琴手痕跡在這裏,即請求和響應 –

回答

2

最後,這最終成爲防火牆問題。我最終取代了過時的sonicwall 2400,問題就消失了。追查是非常困難的,因爲防火牆「無聲無息」地丟棄了沒有任何日誌記錄的數據包。正如我所建議的,我在防火牆,數據庫和應用程序服務器上運行一個跟蹤,以確定數據包被丟棄。

我懷疑由有狀態防火牆設置引起的問題,因爲已知sonicwall丟棄沒有任何日誌的問題數據包。

感謝您的幫助。希望這篇文章能夠幫助別人。

2

你絕對可以排除你的代碼,CORS配置和IIS配置。根據錯誤代碼,您的服務器似乎沒有間歇性響應,或者可能是中間設備/代理/防火牆阻止請求並因此超時。

由於您的網絡管理員排除了問題,由於你可以嘗試主持的WebAPI(沒有這些會讓你快樂的)

1)檢查HTTP.SYS日誌(在機器上幾件事情中間設備C:\ Windows \ System32 \ LogFiles \ HTTPERR)並根據此處的描述檢查https://support.microsoft.com/en-in/kb/820729

2)嘗試徹底禁用防火牆。進入命令提示符(管理模式),並運行

NetSh Advfirewall set allprofiles state off 

3)如果第2步沒有幫助,去運行 - >輸入msconfig - >服務 - >隱藏所有Microsoft服務 - >全部禁用 - >重新啓動和嘗試。

如果沒有任何工作可以同時從服務器和客戶端獲取網絡跟蹤信息,並且您的網絡管理員可以找出正在發生的事情。