Last post Jun 20, 2013 06:30 PM by DMW
May 12, 2013 12:56 PM|AmitChotaliya|LINK
I have a page on which there is a link, when clicked it makes a server call to handler using jquery ajax to start zip creation of a list of files. that click also strats a repeatative server calls which checks what is the current zip creation process.
The logic is simple, I have stored totalBytes in session which is sum of size of all the files, and I have another variable named processedBytes in the session which holds sum of files processed, I make server call every second and get (processedBytes
/ totalBytes * 100) from session which is percentage of process completed. but in current implementation it always returns 0 until and unless the zip creation is completed.
The zip creation method and the zip progress method are in the same handler, differently called using different paramters.
I don't know why it is not working. I have the same implementation in java and php they both seem to be working fine.
Thanks in advance.
May 12, 2013 03:43 PM|kedarrkulkarni|LINK
hope this helps...
May 15, 2013 11:48 AM|AmitChotaliya|LINK
Thanks for the reply.
That I know I added IRequiredSessionState in my Handler but the problem is when I access the variables. Here is some example shortened code.
<%@ WebHandler Language="VB" Class="Handler" %>
Public Class Handler : Implements IHttpHandler, IRequiresSessionState
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
'method call depeding on parameter received from browser
If (context.Request.Params.Get("method").Equals("createZip")) Then
Public Sub CreateZip(ByRef context As HttpContext)
' assume that this is populated with some file paths
Dim files As ArrayList = New ArrayList
context.Session("totalBytes") = 2048 'this value will be populated by iterating through all the files and adding size
context.Session("processedBytes") = 0
'will loop through files and add them into a zip
For Each file As String In files
'code to add individual file in a zip
context.Session("processedBytes") = context.Session("processedBytes") + 1 ' this value is size of current file added to the zip
Public Sub ZipProgress(ByRef context As HttpContext)
'this is processed bytes percentage of total bytes
context.Response.Write(context.Session("processedBytes") * context.Session("totalBytes") / 100)
In this code let's assume that ZipCreate method takes about 15 minutes to zip all the files but it keeps updating the processedBytes as soon as it adds a file in the zip with it's size.
I will keep calling the ZipProgress using ajax every second to check the progress of zip creation by checking the processedBytes session variable. that is where the problem occures if I debug processedBytes variable in ZipCreate method it prints correct
value but if I print same in ZipProgress method it always prints 0. so the method always returns progress as 0 untill the zip progress method is completed.
I could send you the original code if you want.
Jun 20, 2013 06:30 PM|DMW|LINK
Bear in mind that the Session object is not updated until after the handler completes its work - at least in non-inproc modes. Remember, the point of IRequireSessionState is to indicate to the ASP.NET pipeline that it needs to save session state after the
handler has done its stuff.
Therefore, there is no point coming back and calling ZipProgress until CreateZip has completed it's work.