HTTP Komprimering - Fungerer ikke på IIS (6.0)
Hej,Jeg har siddet og leget lidt med at øge performance på et projekt, så jeg har kigget på hvordan jeg kan lave HTTP Komprimering i et 'hosted enviorment'.
Jeg har lavet følgende HTTP Module:
Imports System.IO.Compression
Imports System.Web
Public Class CompressionModule
Implements IHttpModule
Public Sub Dispose() Implements System.Web.IHttpModule.Dispose
' Nothing
End Sub
Public Sub Init(ByVal context As System.Web.HttpApplication) Implements System.Web.IHttpModule.Init
AddHandler context.BeginRequest, AddressOf BeginRequest
End Sub
Private Sub BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs)
Dim app As HttpApplication = DirectCast(sender, HttpApplication)
Dim Extension As String = System.IO.Path.GetExtension(app.Request.Url.ToString).ToLower
If Extension = ".aspx" Then
Dim EncodingHeader As String = HttpContext.Current.Request.Headers("Accept-encoding")
If EncodingHeader.ToLower.Contains("gzip") Then
app.Response.Filter = New GZipStream(app.Response.Filter, CompressionMode.Compress)
HttpContext.Current.Response.AppendHeader("Content-encoding", "GZIP")
ElseIf EncodingHeader.ToLower.Contains("deflate") Then
app.Response.Filter = New DeflateStream(app.Response.Filter, CompressionMode.Compress)
HttpContext.Current.Response.AppendHeader("Content-encoding", "DEFLATE")
End If
End If
End Sub
End Class
Det virker ganske fint når jeg kører på ASP.NET Development Server, og får endda omkring 60% mindre filer. Når jeg kører min application på IIS får jeg tilgengæld Object reference not set to an instance of an object', med følgende stack trace:
[NullReferenceException: Object reference not set to an instance of an object.]
Fridge.CompressionModule.BeginRequest(Object sender, EventArgs e) +240
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +92
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +64
Håber der er nogen der kan hjælpe mig med at finde fejlen.