Время от времени, когда я запускаю свое приложение, я получаю действительно «ДЕЙСТВИТЕЛЬНО» странные символы в своем выводе вместо соответствующей страницы. Теперь я знаю, что это из-за какой-то ошибки, но, к сожалению, ошибка не представляет себя, а просто производит странные символы.
Вот пример полного исходного кода страницы.
I�%&/m�{J�J��t��
$ @ Ig #) ЕВА] F @ 흼 {{; N» ? \ fdlJɞ ~ |!? "Еу) = y6hurjfŲIU <[2O2_] я ߴ 餚] Lg ~ О, [fWyq1o-ZQS 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 $ п: @] uC_X_E ^ Dtm [-; wvVrMJYyuYP 祐2uCw} V | WID \ 0> т ւ ч% уг) Xd jUSzx ^ WŬ?vϚ $ G ^ {Oqq +0,0 = 8fy6 ? .r ~; [Вг ~ / К г | -WźQ и 4BQ4oux | wrtLKо $) Ms.4- ٺ 0,4]>] ˷7 4IZcM;! N_ye_q% L CPE9ejJ [^ fe1r ֏ р ߯ UM3 = В, HYszS̨T?} к Ⱊ pl_d̼ / S [V ", р} JPQ ^! Z�<5���j��Wd�wc�O�䣏0
���O/��h�jv��a�����}�J��y��E���zA�h@��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|< �
РО $ ꀜ ? = 6 <</em>? / д> b7 ^ (= {Зи} и = й J D c vt O ܋ / 1ev} RfM3 / ~ h ϊ - } :? а \ LZ <[/ Rv5K (FCB {{{; {^ 4 -
R |> [6: psFA'7ehU + R> 0 {܍ Ф.И. ; w œ 2JӼi r > po? J2 ] m U1 {J / , C p ^ W jm $ 0 ^ 7d:. ПНВ + t9c-х ٹ Ww ~ 3A9v ۮ- М / => R |? wǽyY 8 {N
# 7 / + ͋UIJafyvx] х}? ~ 1su
! Р] 4 / я] 5у IA ^ УТ _ {? 90 = ~ е "пи ض NRK [г {# s @ # M8. |
GCYQ7zm / г (>> 9 Տ 7: EGNg7 = - 19ir z7vi4x76v> zv0 ~ 3zn8] / H \
? WQ 9 հ к ~ 3} 37G: ߤ ~ пд} у Ō # 6 ) 2 \ lM s p ^ \ @ Vi3 Rr 'Uc PDf h a t : D c җ E88 UHʹ 7 j * _Tm 岼 ֦4 U] ֬ | yYe 7 ' NJl
Я никогда не видел это с веб-формами.
EDIT:
Итак, сегодня я провел некоторое тестирование и нашел кое-что интересное. Прежде всего, приложение выдавало исключение Null Reference (500). Во-вторых, местный отладчик увидел ошибку и сразу бросил желтый экран смерти. Неверный текст показывался на промежуточном сервере, на котором в данный момент выполняется сборка выпуска.
Таким образом, в основном 500 ошибок в сборках Release с отключенными customErrors на моем промежуточном сервере выдают символы CrAzY вместо того, чтобы грациозно переходить на желтый экран смерти.
РЕДАКТИРОВАТЬ 2:
Согласно ответу @ Esteban, вот мой фильтр сжатия
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
Я устанавливаю этот фильтр глобально на каждом контроллере через базовый контроллер. Страница работает очень хорошо, если нет других 500 ошибок, но если у меня есть 500 ошибок, это ужасная голова, я получаю прикольные символы.
Кроме того, иногда у меня нет ошибки на моем сервере разработки, но есть на промежуточном сервере. Это произошло недавно, когда у меня не было обновленной библиотеки на промежуточном сервере, но она присутствовала на моей машине разработки. Я вижу ошибки в журнале событий, но не вижу их на веб-странице ... даже если для пользовательских ошибок установлено значение Off
.
РЕДАКТИРОВАТЬ 3:
Хорошо, теперь мы обнаружили, что эта ошибка возникает из-за того, что мой <CompressionFilter()>
не распаковывает поток, если выдается ошибка 500. Нужно понять, как распаковать мой вывод, несмотря ни на что.