一个ASP.NET应用程序(意外)在多个应用程序域或频繁的应用程序recycing

前端之家收集整理的这篇文章主要介绍了一个ASP.NET应用程序(意外)在多个应用程序域或频繁的应用程序recycing前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在调试一个ASP.NET应用程序,它似乎随机丢失了一些静态字段的内容.我做了一些简单的自定义日志记录(因为即使log4net也不稳定),并发现该应用程序正被加载到两个应用程序域中.这是日志中的一个片段:
  1. 6/27/2011 9:01:01 PM /LM/W3SVC/1/ROOT/MyApp-1-129537072581658334: log message 1
  2. 6/27/2011 9:01:01 PM /LM/W3SVC/1/ROOT/MyApp-1-129537072581658334: log message 2
  3. 6/27/2011 9:01:01 PM /LM/W3SVC/1/ROOT/MyApp-1-129537072581658334: log message 3
  4. 6/27/2011 9:01:01 PM /LM/W3SVC/1/ROOT/MyApp-1-129537072581658334: log message 4
  5. 6/27/2011 9:01:02 PM /LM/W3SVC/1/ROOT/MyApp-4-129537072620628334: log message 5 <-
  6. 6/27/2011 9:01:02 PM /LM/W3SVC/1/ROOT/MyApp-4-129537072620628334: log message 6
  7. 6/27/2011 9:04:50 PM /LM/W3SVC/1/ROOT/MyApp-1-129537074647228334: log message 7
  8. 6/27/2011 9:04:50 PM /LM/W3SVC/1/ROOT/MyApp-1-129537074647228334: log message 8

时间/日期之后的项目是当前的应用程序域名.

该应用程序只是一个常规的ASP.NET(而不是MVC)应用程序,它处理一些AJAX请求并将它们传递给一堆ASP.NET库.唯一不寻常的是,其中一个库使用一些反射来查找某些类,然后实例化并在不同的线程上运行它们.但它没有明确地与app域做任何事情.

顺便说一句,日志文件中突出显示的行来自ASP.NET应用程序本身(即不是来自其中一个单独的线程)来自ASPX处理程序.

我正确地解释了日志吗?如果是这样,什么可以导致从多个应用程序域加载和提供应用程序?

编辑:这个问题基本上与这个问题有关:ASP.NET Application state vs a Static object.但是,根据我今天看到的情况,似乎不可能依赖静态字段.我可以将所有内容移动到Application对象,但我想同步会有点麻烦.我越来越相信应用程序做了非标准的事情.

编辑2:我做了一些调查,似乎应用程序和应用程序域之间始终存在1-1关系(这是我期望的).所以我认为我所看到的就是回收利用.

编辑3:经过一些实验和探索之后,我启用了IIS运行状况监控(基于http://blogs.msdn.com/b/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx),并发现应用程序快速连续启动两次.这实际上非常令人费解.以下是日志事件:

  1. Event code: 1003
  2. Event message: Application compilation is starting.
  3. Event time: 6/28/2011 8:34:31 AM
  4. Event time (UTC): 6/28/2011 3:34:31 PM
  5. Event ID: d42336b18c264516a4ba5aa1e62df276
  6. Event sequence: 1
  7. Event occurrence: 1
  8. Event detail code: 0
  9.  
  10. Application information:
  11. Application domain: /LM/W3SVC/1/ROOT/MyApp-1-129537488697736549
  12. Trust level: Full
  13. Application Virtual Path: /MyApp
  14. Application Path: [snip]\MyApp\
  15. Machine name: US-SEA-R9759B2
  16.  
  17. Process information:
  18. Process ID: 7624
  19. Process name: w3wp.exe
  20. Account name: IIS APPPOOL\DefaultAppPool
  21.  
  22. ----
  23.  
  24. Event code: 1001
  25. Event message: Application is starting.
  26. Event time: 6/28/2011 8:34:33 AM
  27. Event time (UTC): 6/28/2011 3:34:33 PM
  28. Event ID: f7fbecb1ba1a4a24833016cec47458c6
  29. Event sequence: 1
  30. Event occurrence: 1
  31. Event detail code: 0
  32.  
  33. Application information:
  34. Application domain: /LM/W3SVC/1/ROOT-2-129537488729428362
  35. Trust level: Full
  36. Application Virtual Path: /
  37. Application Path: [snip]\RootApp\
  38. Machine name: US-SEA-R9759B2
  39.  
  40. Process information:
  41. Process ID: 7624
  42. Process name: w3wp.exe
  43. Account name: IIS APPPOOL\DefaultAppPool
  44.  
  45. ----
  46.  
  47. Event code: 1001
  48. Event message: Application is starting.
  49. Event time: 6/28/2011 8:34:40 AM
  50. Event time (UTC): 6/28/2011 3:34:40 PM
  51. Event ID: 07a3dc31e8804caca1ddc3b2101962e3
  52. Event sequence: 1
  53. Event occurrence: 1
  54. Event detail code: 0
  55.  
  56. Application information:
  57. Application domain: /LM/W3SVC/1/ROOT-3-129537488807712839
  58. Trust level: Full
  59. Application Virtual Path: /
  60. Application Path: [snip]\RootApp\
  61. Machine name: US-SEA-R9759B2
  62.  
  63. Process information:
  64. Process ID: 7624
  65. Process name: w3wp.exe
  66. Account name: IIS APPPOOL\DefaultAppPool
  67.  
  68. ----
  69.  
  70. Event code: 1001
  71. Event message: Application is starting.
  72. Event time: 6/28/2011 8:34:40 AM
  73. Event time (UTC): 6/28/2011 3:34:40 PM
  74. Event ID: db304b519a084fa797fbcfe66fbb0b48
  75. Event sequence: 1
  76. Event occurrence: 1
  77. Event detail code: 0
  78.  
  79. Application information:
  80. Application domain: /LM/W3SVC/1/ROOT/MyApp-4-129537488808502885
  81. Trust level: Full
  82. Application Virtual Path: /MyApp
  83. Application Path: [snip]\MyApp\
  84. Machine name: US-SEA-R9759B2
  85.  
  86. Process information:
  87. Process ID: 7624
  88. Process name: w3wp.exe
  89. Account name: IIS APPPOOL\DefaultAppPool

MyApp应用程序位于另一个应用程序(RootApp)中.我期望的是两条日志消息:MyApp启动和RootApp启动.

解决方法

您是否意外将AppPool属性(性能选项卡)中的工作进程数设置为2?

在这些属性中,还可能存在一个设置,让您的AppPool根据数量或请求或任何回收设置过于频繁地回收

猜你在找的asp.Net相关文章