Avatar billede dehaas Nybegynder
21. april 2007 - 19:11 Der er 2 kommentarer og
1 løsning

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.
Avatar billede mikkel_sommer Nybegynder
24. april 2007 - 12:48 #1
Avatar billede dehaas Nybegynder
24. april 2007 - 12:55 #2
Nej compression er ikke slået til i IIS. Ideen med mit Module er netop at man ikke skal røre ved IIS, men det hele kan klares fra ASP.NET. Jeg har fundet ud af at problemet opstår ved:

Dim EncodingHeader As String = HttpContext.Current.Request.Headers("Accept-encoding")

Eftersom det ikke er et krav at browserne denser denne header med, har jeg nu lavet et tjek på om den er 'null'. Problemet er nu væk, men jeg får tilgengæld heller ikke compressed content tilbage.

Hvorfor kan IIS ikke det min Header når med development server godt kan?
Avatar billede dehaas Nybegynder
29. april 2007 - 21:19 #3
Jeg har desværre endnu ikke fået løst problemet, men det ser ikke udtil der er nogen her der kan hjælp. Jeg lukker jermed spørgsmålet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester