Wednesday, October 15, 2008

While working on a web application, one of my team presented some weird behaviour on ASP.NET



FIrst observation: Session times out randomly while working on the application.



So we started observing the application closely to see what might be causing this. We came out with some more observations:



Detailed observation: Session times out when any of the user participates in certain scenario. Also, not only the specific session expires, but all the use sessions are expired. Further study shown that actually the app domain itself recycles.



We studied the activities in these specific scenario. We found that a certain implementation use to create folder, put some temporrary files inside it and once done, the folder and the files were deleted. The application recycles whenever the folder is deleted.



The technical reason: ASP.NET runs a File Monitor (FCN) that observes any change to the structure of the Virtual Directory. In case of any change the application is recycled.



Some forums said that tghe app_data folder within the application folder is immune to the condition. But upon testing, we found it otherwise.



Analysis: Lots of analysis:



Also we were observing session expiration initially. All session expires on application recycle unless the state is not in-process. So moving state in-proc to out-proc is a solution.



We found some other approaches as well.



Resolution: There are multiple solutions that can be taken up for this:



Compiled Solutions / workarounds so for



Sol 1: Use out of process session state.



Sol 2: Use Directory Junction between seperate Web folder and content folders. A directory Junction is a pointer to an external folder (outside the application folder/sub folder.

See http://blogs.msdn.com/toddca/archive/2005/12/01/499144.aspx for more details



Sol 3: Disable FCNotifications in ASP.NET2.0 by adding DWORD FCNMode =1 under HKLM\Software\Microsoft\ASP.NET key



Registry information



loadTOCNode(3, 'resolution'); To enable this hotfix, you must add the following DWORD value at the following registry key:

HKLM\Software\Microsoft\ASP.NET\FCNMode



The following table lists possible values for the FCNMode DWORD value and the behavior that is associated with each value.

Value Behavior

Does not exist This is the default behavior. For each subdirectory, the application will create an object that will monitor the subdirectory.

0 or greater than 2 This is the default behavior. For each subdirectory, the application will create an object that will monitor the subdirectory.

1 The application will disable File Change Notifications (FCNs). Smile

2 The application will create one object to monitor the main directory. The application will use this object to monitor each subdirectory.



More info at: http://support.microsoft.com/kb/911272/en-us





Sol 4: Do not delete any folder.



Most of the time solution 4 seems to be easy way out till MS releases fix for this problem. So we are following solution no 4 for the time being.





Further reading:



http://www.eggheadcafe.com/software/aspnet/32318159/modifying-application-fol.aspx



http://blogs.msdn.com/toddca/archive/2005/12/01/499144.aspx



http://forums.asp.net/p/966593/1209642.aspx



http://weblogs.asp.net/owscott/archive/2006/02/21/438678.aspx



https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=240686



http://connect.microsoft.com/VisualStudio/feedback/Workaround.aspx?FeedbackID=240686

