2017-04-19 75 views
0

我正在開發一個ASP.NET MVC Web應用程序(C#),它是整個大型應用程序(主要是基於桌面/ win服務的 - VB.NET)的一個模塊。目前,該應用程序對作爲自己的獨立應用程序(也使用MVC,VB.NET)的Web服務(作爲API提供)進行HTTP調用。可能不是我將如何設計它,但這是我繼承的。MVC Web應用程序和API Web應用程序可以在同一個池中運行嗎?

我的問題是這樣的:如果我在本地IIS中託管MVC應用程序並在IIS Express中運行API項目,一切都很好。如果我將這兩個項目拆分爲在本地IIS中的單獨應用程序池中運行,那麼所有這一切都很好。但是,如果我在IIS中的同一個池中運行這兩個應用程序,我遇到了很多問題。也就是說,當我打電話給HttpClient.GetAsync(url) - 特別是在一個頁面調用這個9次來根據ID動態檢索不同的圖像時(每次調用MVC應用程序,然後調用API)。有些電話通過,大多數不通過。

異常與取消任務有關(超時= 100s) - 但操作需要幾分之一秒的時間,因此不需要超時。當它失敗時,執行甚至不會將它變成API端的函數 - 就像HTTP客戶端已經放棄提供更多的連接一樣,或者任務正在等待HTTP發送請求,它永遠不會。

我試過使它異步通過,嘗試使HttpClient靜態等,但沒有喜悅。這僅僅是不應該做的事情 - 允許這兩個應用程序共享一個應用程序池?如果是這樣,我可以忍受。但是如果有什麼我可以做的更有效地處理它,那將非常有用。任何信息/資源將非常感激。 TA!

回答

0

我們最近遇到了同樣的問題,需要進行相當多的調試才能確定使用相同的應用池是導致問題的原因。

我還發現如果在應用程序池的高級設置中增加最大工作進程的數量,這可能會起作用。

我不確定這是爲什麼,但我猜所有的請求正在處理一個進程,這是導致積壓,最終導致超時太多。 (我很高興有人在IIS更瞭解指正雖然)

HTH

編輯:在進一步閱讀這裏Carmelo Pulvirenti's Blog卻彷彿垃圾收集器可能要怪。該博客指出,在同一個池上運行的多個應用程序共享內存,副作用是;

這意味着GC每秒運行大量時間以便爲您的應用程序提供 清潔內存。副作用是什麼?在服務器模式下, 垃圾回收器需要停止所有線程活動以清理內存(這在.NET Fx 4.5上得到了改進,其中排序規則確實不需要停止所有線程) 。副作用是什麼? Web應用程序

  • 上的CPU時間,由於GC的活動高影響

    1. 降低性能。
  • 相關問題