2010-07-06 4 views
7

Ab und zu wenn ich meine App laufen bekomme ich wirklich "WIRKLICH" seltsame Zeichen in meiner Ausgabe anstelle der entsprechenden Seite. Jetzt weiß ich, dass dies wegen eines Fehlers ist, aber leider stellt sich der Fehler nicht selbst vor, sondern produziert nur merkwürdige Zeichen.ASP.NET MVC2 CrAzY Zeichen in der Ansicht Ausgabe - WTF

Hier ist ein Beispiel für einen vollständigen Seitenquellcode.

I�%&/m�{J�J��t�� $ @ iG #) eVe] f @ 흼 {{N‘ ? \ Fdl J ɞ! ? ~ |? " Ey ') = y6 h u r j fŲIU < [ 2O 2_ ] i ߴ 餚] l g ~ O , [f Wyq1o- z QS iUV I M ԃ z > EV_ Z = J T f Z gi r k ܷ ZPW4 , KO eS י y/ m^+ E eB c j w , Vu Q $ n: @] uC_ X_ E^ d Tm [- ; w v V r MJY y uYP 祐 2 uC w} V | WI d \ 0 > m ւ h % y i ) X d jUS z x^WŬ v Ϛ $ G ^O qq { . 0 = 8 f y6 ? . r ~; [Bt ~ /K z | - W ¼ Q & 4B Q 4o u x | wrt L Kо $) Ms . 4- ٺ. 4 ]>] ˷ 7! 4 IZc M; N_ y e _q % L C PE 9 e j J [^ fe1 r ֏ p߯ uM 3 = B È , H Y sz S̨ T ? } k Ⱊ p l _d ̼/S Z�<5���j��Wd�wc�O�䣏0 ���O/��h�jv��a�����}�J��y��E���zA�[email protected]��45e�e�4?��e�u��vӆ��N����C�b���zE��!���UY��X�s�l���#��?}��Χm����/��u �I���уO��2[Lf����y5�:)�fM����(�Q���}��)!�������d���t|< � PO $ ꀜ ? = 6 <?/q> b 7 ^(= {Z Y} u = 8 u J D c vt O ܋ / 1ev} RfM3/ ~ h ϊ - } : a \ lZ < [/ Rv 5K (F C b {; { {; ? {^ 4- R | > [6 : ps FA ' 7 ehU + R > 0 { ܍ FI; w œ 2JӼi r > po? J2 ] m U1 {J / , C p^W jm $ 0^7d : n Vd + t9c- x ٹ . W w ~ 3 A 9 v ۮ - M/= > R | wǽy Y ? 8 { N 7 # 7 / + ͋UIJa fy v x ] x}? ~ 1s u ! p ] 4 /i] 5 y I A^U T_ { ? 9 0 = ~ e " p i ض nr k [z {# . s @# M8 | G C Y Q7z m/z >> (>> 9Տ 7: EG N g7? = - 1 9 ir z 7vi4 x 76 v > z v0 ~ 3 zn 8 ]/H \ w q ? 9 հ k ~ 3} 3 7 G: ߤ ~ n q } y Ō # 6) 2 \ lM s p^\ @ Vi3 Rr 'Uc PDf h a t : D c җ E88 UH' 7 j * _Tm 岼 ֦4 U] ֬ | yYe 7 ' NJl,

Ich habe noch nie mit Web Forms gesehen.

EDIT:

Also habe ich einige Tests heute und fand einige interessante Sachen. Zunächst warf die App eine Nullreferenzausnahme (500). Zweitens sah der lokale Debugger den Fehler und warf sofort einen gelben Bildschirm des Todes. Der fehlerhafte Text wurde auf dem Staging-Server angezeigt, auf dem derzeit ein Release-Build ausgeführt wird.

Also im Grunde 500 Fehler auf Release-Builds mit customErrors auf meinem Staging-Server wirft CrAzY-Zeichen, anstatt auf dem gelben Bildschirm des Todes ordnungsgemäß zu versagen.

EDIT 2:

Wie pro @ Esteban Antwort, hier ist mein Komprimierungsfilter

Namespace Filters 
    Public Class CompressFilter : Inherits ActionFilterAttribute 
     ''' <summary> 
     ''' GZip compresses each Action when loaded. This satisfies YSlow and 
     ''' PageSpeed. 
     ''' </summary> 
     ''' <param name="filterContext">The filter context.</param> 
     Public Overrides Sub OnActionExecuting(ByVal filterContext As ActionExecutingContext) 
      Dim request As HttpRequestBase = filterContext.HttpContext.Request 

      Dim acceptEncoding As String = request.Headers("Accept-Encoding") 

      If String.IsNullOrEmpty(acceptEncoding) Then 
       Return 
      End If 

      acceptEncoding = acceptEncoding.ToUpperInvariant() 

      Dim response As HttpResponseBase = filterContext.HttpContext.Response 

      If acceptEncoding.Contains("GZIP") Then 
       response.AppendHeader("Content-encoding", "gzip") 
       response.Filter = New GZipStream(response.Filter, CompressionMode.Compress) 
      ElseIf acceptEncoding.Contains("DEFLATE") Then 
       response.AppendHeader("Content-encoding", "deflate") 
       response.Filter = New DeflateStream(response.Filter, CompressionMode.Compress) 
      End If 
     End Sub 
    End Class 
End Namespace 

ich auf jedem Controller über eine Basissteuerung diese Filter global einstellen. Die Seite läuft gut, wenn es keine anderen 500 Fehler gibt, aber wenn ich einen 500-Fehler-Blick habe, ist es hässlicher Kopf, ich bekomme die funky Zeichen.

Auch manchmal habe ich keinen Fehler auf meinem Entwicklungsserver, aber es gibt einen auf dem Staging-Server.Dies geschah kürzlich, als ich nicht die aktualisierte Bibliothek auf dem Staging-Server hatte, aber sie war auf meinem Entwicklungscomputer vorhanden. Ich kann die Fehler im Ereignisprotokoll sehen, aber ich kann es nicht auf der Webseite sehen ... auch wenn ich benutzerdefinierte Fehler auf Off setze.

EDIT 3:

Ok, so jetzt haben wir entdeckt, dass dieser Fehler kommt, weil mein <CompressionFilter()> nicht den Strom dekomprimieren, wenn ein 500-Fehler ausgelöst wird. Ich muss herausfinden, wie ich meine Ausgabe dekomprimieren kann, egal was passiert.

+0

whoooooah .... mein Gehirn hemorrhaging !! – RPM1984

+0

deins und meins beide. –

+0

ist es speziell für eine Route? Machst du irgendeine manuelle Antwort? Schreib Sachen? –

Antwort

2

Dies ist, was ich getan habe, um das Problem zu umgehen. Ich versuche immer noch, einen besseren Weg zu finden. Platzieren Sie den folgenden Code in den global.asax.cs

protected void Application_PreSendRequestHeaders() 
    { 
     HttpResponse response = HttpContext.Current.Response; 
     if (response.Filter is GZipStream && response.Headers["Content-encoding"] != "gzip") 
      response.AppendHeader("Content-encoding", "gzip"); 
     else if (response.Filter is DeflateStream && response.Headers["Content-encoding"] != "deflate") 
      response.AppendHeader("Content-encoding", "deflate"); 
    } 

aktualisieren Schauen Sie sich den folgenden Link für einige weitere Informationen, wo Rick verwendet das folgende um das Problem zu lösen. Platzieren Sie den folgenden in Ihre global.asax.cs

protected void Application_Error(object sender, EventArgs e) 
{ 
     // Remove any special filtering especially GZip filtering 
     Response.Filter = null; 
} 

http://www.west-wind.com/weblog/posts/2011/May/02/ASPNET-GZip-Encoding-Caveats

1

Es sieht so aus, als könnte es ein Problem mit der ungültigen Zeichensatzcodierung sein, die für die Antwort verwendet wird?

Welche Codierung verwenden Sie? Unicode/UTF8 oder ein asiatischer Zeichensatz?

+0

--------- UTF-8 –

+0

Haben Sie versucht, Ihre Antwort in UTF-8 explizit zu codieren?Dadurch wird der Browser gezwungen, utf-8-Dokumente auf Ihren Seiten zu erstellen. Überprüfen Sie auch Ihren DOCTYPE - verwenden Sie die entsprechenden Doctypes für Ihre Kontrollansichten? – mallows98

+0

Ich benutze den HTML5 DocType '' –

1

Nein, es handelt sich nicht um ein ungültiges Zeichensatzproblem. Ich habe das schon einmal erlebt. Was passiert, ist, dass Sie den Inhalt deflationieren und irgendwie (entweder tritt eine Ausnahme auf, die Sie vergessen, usw.) und nicht die Komprimierungsmethode einstellen, die Sie in den Headern verwendet haben.

Nun, um tatsächlich das Problem zu lösen, haben Sie ein paar Optionen:

  1. On (auf global.asax oder in einem benutzerdefinierten Handler) Application_PreSendRequestHeaders Chek, um zu sehen, ob der Inhalt delfated ist und die Header sind fehlt; Sie können den Inhalt entweder deflate oder die Header hinzufügen.
  2. Bei Fehlern deflate den Inhalt oder fügen Sie die richtigen Header hinzu.

Hoffe, dass hilft.

+0

Bitte beachten Sie meine neueste Bearbeitung. –

+0

Ich habe das auch schon gesehen. Aus irgendeinem Grund, wenn eine nicht behandelte Ausnahme ausgelöst wird und ASP.NET den Fehler behandeln muss, wird die Komprimierungsmethode aus der Kopfzeile gelöscht. Ich weiß nicht warum, aber ich habe es gesehen. Sie sollten in der Lage sein, dies zu duplizieren, indem Sie eine Ausnahme auslösen, nachdem Ihr Filter ausgeführt wurde. Sie sehen die gleiche Ausgabe. –

+0

das macht Sinn, aber wie kann ich es beheben? –

Verwandte Themen