ASP.NET AXD ресурсы блокируются на стороне клиента?
У меня есть веб-приложение, которое я размещаю, и мой клиент сообщает, что некоторые библиотеки JavaScript Telerik, включенные в сайт (но не все), не работают должным образом.
До сих пор мне удавалось диагностировать, что в какой-то момент процесса ресурсы WebResource.axd, содержащие код JavaScript Telerik, блокируются. Запрос клиента о переходе непосредственно к самому файлу AXD с той же строкой запроса приводит к сообщению об ошибке "Соединение с сервером было сброшено" в Internet Explorer.
Клиент попытался загрузить этот файл с нескольких компьютеров по их расположению, а также с компьютера за пределами своего брандмауэра и сети и с машины, работающей в их доме, и каждый раз получает одну и ту же ошибку. Они пытались использовать как Internet Explorer, так и Firefox.
Однако я могу успешно загрузить один и тот же файл как внутри нашей хостинговой сети, так и за ее пределами, а также из моего домашнего подключения.
Согласно журналам IIS, все зарегистрированные попытки загрузить ресурс дали результат 200 HTTP OK.
Другие вещи, которые были предприняты:
- Ссылка на несуществующий 404.axd (выдала желтое сообщение об ошибке ASP.NET 404, как и ожидалось)
- Ссылка на WebResource.axd, но с недопустимой строкой запроса, указывающей на ресурс, который не существует (дал желаемое неверное состояние представления ASP.NET или недопустимую строку base64, как и ожидалось)
- Ссылка на тот же WebResource.axd, но через другой заголовок хоста (то же сообщение об ошибке "сброс соединения").
Сейчас я в растерянности из-за того, что может даже быть проблемой в данный момент. На нашем хостинг-сервере годами размещаются десятки различных приложений ASP.NET (включая несколько экземпляров рассматриваемого), и это первая жалоба, которую я видел по этому поводу.
Я на 99% уверен, что проблема связана с неправильной конфигурацией фильтрации содержимого брандмауэра или маршрутизатора, но это не объясняет, почему клиент видит те же проблемы как вне брандмауэра, так и дома.
Любые идеи относительно того, что может пойти не так, или даже какие дополнительные вопросы задать? Кто-нибудь видел хоть что-нибудь подобное?
3 ответа
Никогда не понимал, в чем проблема, но обновление RadControls до последней версии (финал Q1'09), похоже, решило проблему.
Если это происходит с классическими RadControls для ASP.NET, попробуйте установить UseEmbeddedScripts="false" для элементов управления на странице. Это заставит их обслуживать все сценарии из папки RadControls (физические файлы.js) вместо использования встроенных ресурсов (WebResource.axd). Естественно, вы должны убедиться, что у вас есть файлы скриптов в вашей папке RadControls.
Если это происходит с RadControls для ASP.NET AJAX, то скрипты элементов управления загружаются с помощью диспетчера сценариев (ScriptResource.axd, а не WebResource.axd). В любом случае вы можете попробовать использовать Telerik RadScriptManager вместо ASP.NET ScriptManager - это объединит и сжимает все сценарии в один запрос.
Наконец, вы можете попросить своего клиента загрузить и установить Fiddler для IE или Firebug для Firefox и проверить, что именно происходит с ошибочными запросами (например, ответ сервера, что находится в теле ответа и т. Д.).
Устранить WebResource.axd
а также ScriptResource.axd
со страницы, вам нужно
- Откройте соответствующую сборку с помощью Reflector или ILSpy, а затем сохраните встроенные файлы JS из раздела ресурсов.
- Теперь добавьте их как ссылки на скрипты, используя asp:ScriptManager
Позже эти определения будут представлены как:
<script src="staticJS1.js" type="text/javascript"></script>
<script src="staticJS2.js" type="text/javascript"></script>
И больше не будет заблокирован.
<asp:ScriptManager ID="Scriptmanager1" runat="server">
<Scripts>
<asp:ScriptReference Name="MicrosoftAjaxWebForms.js" Assembly="System.Web.Extensions"
Path="~/staticJS1.js" />
<asp:ScriptReference Name="MicrosoftAjax.js" Assembly="System.Web.Extensions" Path="~/staticJS2.js" />
</Scripts>
</asp:ScriptManager>