This is a migrated thread and some comments may be shown as answers.

RadCompression + ashx + Content-Length Header + Flush

2 Answers 151 Views
Compression
This is a migrated thread and some comments may be shown as answers.
Chuck
Top achievements
Rank 1
Chuck asked on 26 Jan 2012, 06:35 PM
After implementing the RadCompression model on a previously working ashx page I was using for secure file downloads, itstopped working in Firefox, Chrome, & Safari, but continued to work in IE (tested v9).  I found 2 possible places for the error, but due to time constraints had to stop and simply remove the RadCompression module.

1.    On my development box, Win 7, IIS 7, flushing the data (context.Response.Flush()) between the header and the content caused the browsers listed above to report an invalid compression.

2. On my production server, Windows Server 2003, IIS 6, the browsers just sit there and spin, as if they are waiting for more content.  I think this is due to my manually adding a "Content-Length" based on the size of the uncompressed content.  Is there a sample showing the correct parameters to set when using RadCompression in this scenario?  My page, based on parameters, may return any of the following, and so I am also setting the content type and content-disposition headers manually:

    a.    HTML (text/html)
    b.    Text (text/plain)
    c.    Zip (application/zip)
    d.    Excel (application/vnd.ms-excel)
    e.    Excel 2007 (application/vns.openxmlformats-officedocument.spreadsheetml.sheet)
    f.    Jpg (image/jpeg)

These files are dynamically generated, so I would also like to specify "no-cache" in the sample as well.

The following is my working (without RadCompression) sample. (Again, it works in IE, but not others.)

Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
 
        '''The following 2 lines do not seem to make a difference, but were added when trying to test
        context.Response.Clear
        context.Response.BufferOutput = True
 
        'Get the filename
        Dim fileName As String = context.Request.QueryString("i")
         
        'Get the file type
        Dim fileType As String = context.Request.QueryString("t")
         
        'Get the project name
        Dim projectName As String = Managers.SessionManager.ProjectName(context.Session)
         
        'Get the userId
        Dim userId As Integer = Managers.SessionManager.UserId(context.Session)
         
        'Make sure the project and user name are valid
        If IsProjectAndUserValid(projectName, userId) = True Then
         
            Dim securePath As String = Utilities.IO.GetSecureDirectory(Managers.ConfigManager.SecureOutput, projectName, userId)
         
            'Create the full physical path to the file       
            Dim fullPath As String = IO.Path.Combine(securePath, fileName)
         
            'See if the file exist
            If IO.File.Exists(fullPath) Then
                'Open a fileinfo object for the file
                Dim currentFileInfo As New IO.FileInfo(fullPath)
                 
                Select Case fileType.ToLower
                    Case "zip"
                        context.Response.AddHeader("Content-Disposition", "attachment;filename=MyZip.zip")
                        context.Response.ContentType = "application/zip"
                    Case "export"
                        'Get the fileextension
                        Dim fileExtension As String = IO.Path.GetExtension(fullPath)
                        If fileExtension = ".html" OrElse fileExtension = ".htm" Then
                            context.Response.AddHeader("Content-Disposition", "attachment;filename=Export.htm")
                            context.Response.ContentType = "text/html"
                        ElseIf fileExtension = ".txt" Then
                            context.Response.AddHeader("Content-Disposition", "attachment;filename=Export.txt")
                            context.Response.ContentType = "text/plain"
                        ElseIf fileExtension = ".xls" Then
                            context.Response.AddHeader("Content-Disposition", "attachment;filename=Export.xls")
                            context.Response.ContentType = "application/vnd.ms-excel"
                        ElseIf fileExtension = ".xlsx" Then
                            context.Response.AddHeader("Content-Disposition", "attachment;filename=Export.xlsx")
                            context.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
                        End If
                    Case "print"
                        context.Response.ContentType = "text/html"
                    Case "image"
                        context.Response.AddHeader("Content-Disposition", "inline;filename=Print.jpg")
                        context.Response.ContentType = "image/jpeg"
                End Select
                 
                '''The following line has had inconsistant results in some browsers
                'context.Response.CacheControl = "no-cache"
                '''Is the following line is another (unconfirmed) problem for RadCompression?
                context.Response.AddHeader("Content-Length", currentFileInfo.Length.ToString)
                context.Response.StatusCode = 200
                ''''The following line breaks RadCompression in IIS7
                'context.Flush()
                context.Response.WriteFile(fullPath)
                context.Response.Flush()
                context.Response.End()
            Else
                context.Response.StatusCode = 200
                context.Response.Write("No data located for this request.")
                context.Response.End()
            End If
             
        End If     
         
    End Sub

2 Answers, 1 is accepted

Sort by
0
Accepted
Johny
Top achievements
Rank 1
answered on 31 Jan 2012, 09:44 AM
Hello,

I suspect that you have to manually exclude your handler from being compressed. Telerik says how to achieve it here:

http://www.telerik.com/help/aspnet-ajax/radcompression.html

I hope this helps.
Johny
0
Chuck
Top achievements
Rank 1
answered on 31 Jan 2012, 02:07 PM
Thank you for the response.  That would be another work-around that would not be as dramatic as simply removing the control enitrely.
Tags
Compression
Asked by
Chuck
Top achievements
Rank 1
Answers by
Johny
Top achievements
Rank 1
Chuck
Top achievements
Rank 1
Share this question
or