因此,我有一個在Azure上運行的Web應用程序,並且有一個API端點將處理一個漫長的過程(大概我可以說)。在visual studio上運行local時很好,但當它變成天藍色時,在請求開始55秒後失敗。Azure Web Apps Timeout long process request
我有研究發現這個問題在每個平臺上,我改變了在終點上添加這行代碼的機會。
System.Web.HttpContext.Current.Server.ScriptTimeout = 10000;
所以,現在它能夠延長到超時,但仍然無法在3分50秒後處理。在這一點上,我發現還有其他的東西叫負載平衡器。他們都表示,Azure負載平衡器將在4分鐘後自動終止所有請求。所以我堅持在這個地方。
所以我嘗試了所有這些解決方案。
1.System.Web.HttpContext.Current.Server.ScriptTimeout = 10000; 2.System.Net.ServicePointManager.SetTcpKeepAlive(true,30000,30000); 3.使用「啓動新線程」來處理長進程並將http狀態代碼返回給客戶端,初始化進程已啓動。 4.做長時間的過程作爲另一個異步功能
我想要實現的很簡單,一個長的過程函數可以被調度程序任務或手動觸發(AJAX調用)。
有什麼建議嗎?
我認爲你需要打破你對API的客戶端會發生什麼,然後在服務器端會發生什麼情況的說明(或者你想要發生)我很好奇看到更多關於方法的細節3.你立即返回的地方 - 爲什麼會失敗? –
@ G.Stoynev客戶端將是一個AJAX調用,第一個設計是將請求發送到服務器,然後服務器在這個長的過程完成後返回,而服務器端則是啓動過程的整個流程(檢查,添加數據到數據庫,但記錄是巨大的)。對於方法3來說,這只是我的愚蠢想法,所以讓我們說客戶不希望得到結果,而是說過程完成與否,它從服務器獲得響應並向用戶顯示「過程開始」。所以線程會喜歡在後臺運行,它不需要響應任何結果給用戶。 有何建議? –
如果客戶端啓動Ajax調用並且服務器返回http接受狀態(如果請求已開始處理但未完成),那麼該如何處理?在客戶端,onsuccess處理程序可以重新查詢服務器,直到它接收到指示完成的http確定狀態。當然客戶必須知道正確的方式來唯一地識別操作。 –