當客戶端會話建立到ASP.NET MVC2應用程序時,我無法找到明確的答案我假設線程池中的特定線程處理該請求。同一個線程是否總是處理該會話的所有後續請求?因此,理論上,如果會話ID被搞砸了,並且選擇了錯誤的線程,那麼會丟失任何會話級別的數據? 謝謝會話和線程
Q
會話和線程
6
A
回答
2
不可以。每個請求可以由不同的線程處理。這意味着頁面上的各種資源可以由不同的線程處理。或者他們可能會在同一個處理。這取決於工作流程和iis,以確定是否值得創建新線程,或者更好地等待一個線程變得可用。
該頁面將被一個線程渲染,然後可以在相同或其他線程上處理圖像,樣式表和javascripts。這對於一般的ASP.NET和Web編程中的無狀態本質至關重要。它允許你做的是在不同的服務器甚至不同的域之間平衡所有的請求。
這給我們帶來了關於會話狀態的問題。您不應該在請求之間丟失會話id。如果你是,那麼嚴重的事情是錯誤的。或者,您可能處於網上服務器場/羣集環境,其中一個請求將發送到一個服務器,另一個請求會通過某種負載平衡路由到另一個服務器。
在負載均衡的情況下,你必須有一些持久化會話狀態的方法。兩種最常見的方法是保存到數據庫和分佈式緩存。後者是我的首選方法,因爲會話數據本質上是臨時性的,不屬於持久性數據庫。
3
總之,不,不是在IIS(我不能保證在Visual Studio中的「卡西尼」 Web開發服務器,但我也懷疑有)
可以證明該線程中加入以下變化一個觀點:
<%= System.Threading.Thread.CurrentThread.ManagedThreadId %>
現在反覆從您的瀏覽器中點擊頁面(或者打2級或3的瀏覽器),你會看到它隨着時間而改變。
話雖如此 - 在這樣一個簡單的情況下,你可能會經常看到相同的線程爲請求提供服務,因爲它不值得ASP.NET創建比它需要更多的線程,但一旦你開始加載服務器,你會看到多個線程。
相關問題
- 1. 線程和SQLAlchemy會話
- 2. 異步線程和會話
- 3. nHibernate會話和多線程
- 4. ASP.NET會話和線程問題
- 5. ASP.NET中的會話和線程
- 6. Jetty線程池和sun.HttpServer會話
- 7. 線程和休眠會話的問題
- 8. 休眠會話和線程安全
- 9. Spring和線程:找不到當前線程的會話
- 10. 會話Bean中的線程
- 11. 休眠會話線程
- 12. JMS會話線程影響
- 13. Hibernate的會話與線程
- 14. 多線程會話後線程不會恢復
- 15. 在多線程/線程池中訪問asp.net會話線程
- 16. 會話作用域bean工作在會話線程之外
- 17. 將會話添加到會話線程安全
- 18. 線程安全無狀態會話Bean
- 19. 在線程中重用Hibernate會話
- 20. 每個會話的線程限制?
- 21. Java線程會話的最佳實踐
- 22. 線程安全的SQLAlchemy會話請求
- 23. Spring + Hibernate + Envers +多線程 - 會話關閉
- 24. 每個線程與ThreadLocal的NHibernate會話
- 25. EJB會話bean線程安全
- 26. NHibernate的多線程會話管理
- 27. Spring會話範圍bean,線程安全
- 28. 線程會話在SQLAlchemy上過期嗎?
- 29. Django會話線程安全嗎?
- 30. 從子線程獲取http會話?
我不確定線程方面會如何導致會話ID變得混亂。你能再解釋一下你的想法嗎? – 2010-07-29 02:58:49