"Не удалось загрузить клиентскую среду ASP.NET Ajax" с WCF - все перепробовал, все равно получаю

Теперь я получаю сообщение "Не удалось загрузить клиентскую среду ASP.NET Ajax". Ошибка javascript на моем веб-сайте asp.net 4, как только я его запустил (откройте страницу входа).

Раньше это происходило только после того, как я нажал Ctrl-F5 (обновить страницу и все изображения / таблицы стилей / скрипты) в браузере во время отладки.

Мое приложение использует asp.net 4 (изначально написано на 1.1 или 2), WCF, JsTree, некоторые элементы управления Telerik и расширения / инструментарий MS AJAX.

За несколько дней поиска я нашел большое количество решений от людей с такой же проблемой (в том числе здесь, на SO и справочных форумах Telerik):

Я попробовал следующее, ни один не работал для меня:

  • Попытка размещения ToolkitScriptManager на странице вместо ScriptManager
  • Перейдите в панель управления "Программы и компоненты" и выполните "восстановление" в "Microsoft .net framework 4 Профиль клиента" и "Microsoft.net Framework 4 Extended".
  • Перемещение ScriptManager вниз страницы
  • В Web.config установка компиляции debug="false"
  • Запустил новый проект ASP.NET 4, добавил и обновил панель на страницу, посмотрел на web.config и попытался сделать мой web.config похожим на него
  • Проверено правильность системной даты ПК
  • использовал элементы location в моем web.config, чтобы разрешить неаутентифицированный доступ к WebResource.axd, ScriptResource.axd и Telerik.Web.UI.WebResource.axd (у меня есть элементы управления Telerik на этом сайте)
  • Добавлены маршруты. Игнорировать ("{resource}.axd/{*pathInfo}"); на мою регистрацию маршрута в global.asax

Любые другие решения этой проблемы?

Я могу опубликовать web.config или код, если это необходимо.

Обновление 1: дополнительная информация
Я посмотрел на то, что происходило, используя вкладку "net" firebug. Запросы GET для ScriptResource.axd и Webresource.axd не выполняются с 404. Это проливает дополнительный свет на проблему?

Обновление 2: Частичное решение? Я использовал историю управления исходным кодом, чтобы вернуться к web.config, прежде чем я добавил службу WCF на сайт. Наконец-то сработал web.config, перед тем как я добавил это:

<system.serviceModel>
    <behaviors>
        <endpointBehaviors>
            <behavior name="FoldersAspNetAjaxBehavior">
                <webHttp/>
            </behavior>
        </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <services>
        <service name="Folders">
            <endpoint address="" behaviorConfiguration="FoldersAspNetAjaxBehavior" binding="webHttpBinding" contract="Folders" />
        </service>
    </services>
</system.serviceModel> 

... и удалил связанную строку маршрутизации из моего global.asax:

routes.Add(new System.ServiceModel.Activation.ServiceRoute("", new System.ServiceModel.Activation.WebServiceHostFactory(), typeof(Folders)));

Таким образом, один или оба из них были виновником. Кто-нибудь может подсказать, как служба WCF или ее маршрутизация могли вызвать эту ошибку MS Ajax?

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

Альтернативно - кто-нибудь может предложить альтернативу WCF? Я могу жить без этого, если я смогу доставлять свои данные JSON в jquery другим способом. Может быть, HttpHandler, или WebService, или веб-форма, которая выплевывает JSON как response.write или что-то еще?

Обновление 2: Маршрутизация
Похоже, что проблема маршрутизации в global.asax, необходимая для службы WCF, является проблемой (см. Выше). Комментирование одной строки, похоже, решает проблему. Собираюсь попробовать изменить маршрут маршрута...

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

7 ответов

Решение

В моем случае то, что на самом деле исправлялось, меняло способ вызова службы WCF.

Из учебников, которые я читал в WCF, я упустил тот факт, что мне не нужна маршрутизация в Global.asax для вызова веб-службы, и я мог просто назвать это так:

http://localhost/myWebApp/WcfService.svc/MethodName?param=value

(Я полагался на маршрутизацию в global.asax, чтобы позволить мне называть его так: http://localhost/myWebApp/MethodName?param=value. Я избавился от маршрутизации и вместо этого использовал вышеуказанный способ, а также проблему исчез)

Спасибо всем за проницательные ответы.

Я думаю, что проблема связана с изменением версии.net Framework.

Ошибка в том, что не удалось загрузить библиотеку на стороне клиента. Есть также около 404 ошибок, которые указывают на то, что проблема заключалась в том, что файлы не были получены с сервера.

Так что все утки должны быть в ряд

  • правильная версия asp_net зарегистрирована
  • настройки в web.config используют правильную версию фреймворка
  • пул приложений настроен на использование правильной версии фреймворка

Возможно, WCF похитили два обработчика. Вы можете попробовать добавить обработчики обратно вручную. Если вы сливаетесь в

<httpHandlers>
  <add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="true"/>
</httpHandlers>

к вашей веб-конфигурации, WebResource.axd все еще возвращает 404?

Вы можете почти наверняка обойтись без WCF. Добавьте простой веб-сервис и добавьте метод для каждого асинхронного вызова, который вы хотите сделать для JSON или XML. Два атрибута, о которых вам нужно знать, это WebMethod и scriptservice.

хотя об их использовании с jQuery можно узнать здесь

Установите расширение браузера, которое может регистрировать запросы к серверу. Например, FireBug для Firefox. Затем вам нужно проверить все запросы браузера, сделанные на ваш сервер, и посмотреть, есть ли какие-либо ошибки или слишком короткие ответы.

Не уверен насчет ошибок ajax, однако вам действительно не нужен wcf, если вы имеете дело с простыми веб-сервисами xml / json... я заменил большинство наших wcf-сервисов на полноценные веб-сервисы xml / json... большинство этих сервисов на самом деле представляют собой простой aspx-файл, в котором я выводлю свои результаты в формате xml / json

.net Framework поставляется со встроенными программами чтения и записи XML / JSON, которые вы можете использовать для преобразования ваших структур данных (если таковые имеются) в XML / JSON.

пример: вы можете использовать класс XmlTextWriter для прямой записи в Response.OutputStream. например:

XmlTextWriter xtw = new XmlTextWriter(Response.OutputStream, Encoding.UTF8);
xtw.WriteStartDocument();

У меня проблема. Из-за маршрутизации из файла global.asax все скрипты перенаправлялись на какую-то другую страницу, и поэтому было трудно найти файлы скриптов ajax для этой страницы.

Другие вопросы по тегам