Назад | Перейти на главную страницу

Ошибки Javascript только на рабочем сервере?

Я занимаюсь выпуском нескольких веб-сайтов asp.net от разработки до производства. В разработке все вроде работает нормально, но после выпуска в производство мы получаем ряд ошибок javascript при доступе к сайту. Похоже, что это что-то на сервере, поскольку этот же код был развернут на тестовом сервере и отлично работает с теми же клиентами. Сервер - Windows 2008, использующий IIS7.

Выбрасываемые ошибки:

Количество синтаксических ошибок (scriptResource) - 10 из них

Error: syntax error
Source File: http://website.com/ScriptResource.axd?d=abc032_vah79hasdf87&t=123456789
Line: 3
Source Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

Ошибка такая же, как и выше, но с WebResource.axd вместо ScriptResource.axd - 2 из них

а затем два, которые кажутся настоящей причиной?

Sys is not defined

и

WebForm_AutoFocus is not defined

----------------- Приложение --------------------

В соответствии с предложениями я просмотрел ScriptResource.axd и WebResource.axd

Развертываемое веб-приложение имеет проверку подлинности с помощью форм и перенаправляет на страницу входа, если есть ссылка на любую страницу, кроме страницы входа. Похоже, что это происходит с ScriptResource.axd и WebResource.axd (т.е. страница входа пытается ссылаться на эти элементы, происходит перенаправление, поэтому они не возвращают javascript, возникают ошибки)

С этой целью я добавил теги «location» в web.config, чтобы попытаться разрешить всем пользователям обращаться к этим элементам, чтобы страница входа работала (см. Соответствующие разделы web.config ниже)

<system.web>
   <authentication mode="Forms">
      <forms loginUrl="login.aspx" defaultUrl="home.aspx"/>
   </authentication>
   <authorization>
      <deny users="?"/>
      <allow users="*"/>
   </authorization>
   ...
</system.web>
<location path="ScriptResource.axd">
  <system.web>
    <authorization>
      <allow users="*"/>
      <!-- allow all users -->
    </authorization>
  </system.web>
</location>
<location path="WebResource.axd">
  <system.web>
    <authorization>
      <allow users="*"/>
      <!-- allow all users -->
    </authorization>
  </system.web>
</location>

Это, к сожалению, тоже не решило проблему. Есть ли какая-то опция настройки / конфигурации, которая останавливает работу тега местоположения? Мы добавили те же теги для страниц в приложении (для тестирования), и оно работает на машине разработчиков, но не на сервере. Похоже, если бы мы могли просто заставить эти теги местоположения работать на сервере, все бы работало, есть предложения?

Откройте полные URL-адреса исходных файлов (... ScriptResource.axd ...) в новом окне браузера. Вы должны увидеть некоторый контент JavaScript. В противном случае компоненты asp.net ajax установлены неправильно.

Sys is not defined

указывает, что компонента на стороне клиента Ajax нет, класс sys не найден.

Если вы используете .net 3.5, это часть фреймворка, и проблема должна быть в web.config, при использовании .net 2.0 вам нужно ASP.NET AJAX 1.0, если вы установите этот msi-файл на сервер, файлы попадут в GAC, центральное место для компонентов .net. Вы можете поместить один файл System.Web.Extensions.dll в каталог bin без установки msi, но вам все равно нужны правильные настройки в файле web.config. Сайт ajax.asp.net есть много информации обо всем этом.

Хорошо, в этой проблеме было два раздела и два решения:

Во-первых: Sys is undefined происходило из-за того, что /ScriptResource.axd и /WebResource.axd находились в разделе веб-сайта, который затем перенаправлялся на страницу входа (проверка подлинности форм), которая затем не возвращала требуемый javascript. из этих файлов.

Во-вторых: как только теги были добавлены, чтобы эти элементы были видны, было обнаружено, что анонимный доступ был отключен, и похоже, что для работы тегов анонимный доступ должен быть включен.

Похоже, вам может не хватать компонента на сервере или что сам Интернет неправильно настроен для использования компонентов ASP.NET Ajax. Возможно, разработчики использовали другую библиотеку, например Ajax.NET Toolkit, и ее нужно установить на сервере?

Чтобы отладить это, я бы попытался использовать FiddlerTool и посмотрите, каков точный ответ всех ресурсов, которые ваша страница пытается загрузить (ScriptResource.axd и WebResource.axd). Может быть некоторый конфликт версий с собраниями в GAC.

Есть еще несколько постов / обсуждений этой проблемы, возможно, есть решение для вас:

У меня была такая проблема. WebResource.axd не может найти WebForms.js (который встроен в System.Web.dll).

Я восстановил установку фреймворка ASP.NET xx на сервере, и после этого он работал.

У меня была такая же проблема, и я отслеживал отсутствующий код WebForm_Autofocus для параметра в web.config,. Когда этот параметр был удален / закомментирован, все заработало, и для всех остальных функций скрипта был сгенерирован js-скрипт.

Похоже, это проблема web.config, которую может потребовать решить Microsoft. Я использую VS 2010, версия 10.0.40210.1 SPIRel, с кодом, ориентированным на .Net 4.0. Я не понял базовый процесс, который убивает генерацию JS, когда эта опция активна.