Перемещение сайта ASP.NET на IIS7 приводит к бессмысленным символам в выводе страницы - PullRequest
5 голосов
/ 26 июня 2009

У меня есть сайт ASP.NET, который нормально работал на Windows Server 2003 / IIS6.

Я переместил его в Windows Server 2008 / IIS7, и вывод aspx-страницы теперь содержит бессмысленный текст.

Например:

р

Большая часть страницы отображается правильно, но кое-где есть тарабарщина. Я проверил журналы событий и ничего нет.

Есть идеи, что здесь происходит? Как я могу это исправить?

Я заметил, что эта проблема появляется, когда я включаю несколько операторов Server.Execute в код aspx:

<% Server.Execute("/inc/top.inc"); %>

<% Server.Execute("/inc/footer.inc"); %>

.inc. Файлы выше содержат только HTML. Похоже, что файлы должны иметь значительную длину, чтобы вызвать ошибку. Вот пример HTML-кода, с которым я тестировал:

<div class="logo">
  <a href="/">
    <img src="/logo.png" alt="logo" width="31" height="29" class="logoimg" />
  </a>
</div>
<div class="logo">
  <a href="/">
    <img src="/logo.png" alt="logo" width="31" height="29" class="logoimg" />
  </a>
</div>
<div class="logo">
  <a href="/">
    <img src="/logo.png" alt="logo" width="31" height="29" class="logoimg" />
  </a>
</div>
<div class="logo">
  <a href="/">
    <img src="/logo.png" alt="logo" width="31" height="29" class="logoimg" />
  </a>
</div>
<div class="logo">
  <a href="/">
    <img src="/logo.png" alt="logo" width="31" height="29" class="logoimg" />
  </a>
</div>
<div class="logo">
  <a href="/">
    <img src="/logo.png" alt="logo" width="31" height="29" class="logoimg" />
  </a>
</div>

Кроме того, тарабарские символы появляются непоследовательно. Если я нажимаю Ctrl + F5 на страницах, изменяющиеся символы меняются и иногда вообще не появляются.

Ответы [ 10 ]

1 голос
/ 28 сентября 2011

Бьюсь об заклад, проблема в том, что вы видите обычную страницу ошибок, сжатую gzip. Однако HTTP-заголовок сжатия gzip теряется, когда сервер перенаправляется на страницу с ошибкой, поэтому браузер не знает, как его распаковать. У вас есть какой-то специальный модуль, который выполняет сжатие? Вы устанавливаете Response.Filter?

1 голос
/ 30 августа 2009

Зайдите в Firefox и попробуйте вручную переключить кодировку страницы (возможно, сначала в Windows-1252), посмотрите, исчезнет ли тарабарщина. Если он вдруг читается, то, по крайней мере, вы поймете, что это проблема кодирования.

Я бы также предложил посмотреть на вывод в шестнадцатеричном редакторе, чтобы увидеть, что вы на самом деле получаете. Это также может дать вам подсказку, где искать. Можно также попробовать отключить кодировку gzip или сжатие страниц.

1 голос
/ 23 декабря 2010

Мы никогда не сможем решить эту проблему.

Единственное решение, которое работало, состояло в том, чтобы исключить использование Server.Execute ().

1 голос
/ 23 февраля 2010

это не имеет ничего общего с кодировкой. Это IIS не знает, как обрабатывать сообщения об ошибках, если вы используете его в сочетании с виртуальным каталогом. Я предполагаю, что если вы запускаете этот сайт в локальной отладке на компьютере, сообщения об ошибках отображаются нормально. Попробуйте, если это так, то вы можете начать делать вывод, где находится настоящая ошибка.

1 голос
/ 27 августа 2009

Также вы можете проверить элемент глобализации в web.config
Он должен быть в разделе system.web:

<globalization
    requestEncoding="utf-8"
    responseEncoding="utf-8"
    fileEncoding="utf-8"
    responseHeaderEncoding="utf-8" 
/>
1 голос
/ 26 августа 2009

http://forums.asp.net/p/329153/330330.aspx содержит обсуждение аналогичной проблемы, интересно, это та же самая проблема, которую вы видите. Вот выдержка из ответа rox.scott:

если вы передаете выполнение страницы после установки Response.Type и т. Д., То получающийся в результате Response будет иметь Response.Type и кодировку, заданные начальной страницей - что может быть несовместимо с символами. на второй странице. Решение: убедитесь, что вы правильно указали тип ответа и кодировку на ОБАХ страницах.

Хотите попробовать это и посмотреть, работает ли это?

Если это не сработает, http://msdn.microsoft.com/en-us/library/39d1w2xf.aspx будет интересно обсудить различные варианты конфигурации, которые вы можете попробовать использовать для согласованного кодирования по всему сайту. Вы можете попробовать некоторые из них. Кроме того, эта статья MSDN не использует директиву ContentType, а вместо этого рекомендует следующее:

<%@ Page RequestEncoding="utf-8" ResponseEncoding="utf-8" %> 

Не уверен, что это приведет к эквивалентным результатам при настройке ContentType, но это достаточно просто попробовать.

0 голосов
/ 17 марта 2010

В средстве просмотра событий Windows вы, скорее всего, сможете найти истинную причину ошибки. Таким образом, вы можете это исправить.

К сожалению, вам требуется RPD / физический доступ к серверу, и это только устраняет ошибку. Не причина ошибки не появляется.

0 голосов
/ 26 июня 2009

Возможно, вы отправляете кодировку, отличную от кодировки файлов .inc.

Проверьте кодировки ваших файлов .aspx и .inc и проверьте параметр charset заголовка content-type, отправляемого в браузер.

РЕДАКТИРОВАТЬ : Поскольку сервер отправляет UTF-8, вам следует преобразовать файлы .inc в UTF-8.

Для этого откройте файл в Visual Studio, нажмите «Файл», «Дополнительные параметры сохранения» и выберите Unicode (UTF-8 without signature) - Codepage 65001. (Около нижней части списка)

0 голосов
/ 26 июня 2009

Это небольшой удар, но попробуйте установить режим конвейера в «классический» в IIS.

0 голосов
/ 26 июня 2009

Попробуйте установить параметр charset.

<% Page ContentType="text/html; charset=utf-8"%>
...