WebResource.axd и ScriptResource.axd странное поведение - PullRequest
4 голосов
/ 23 февраля 2011

Я создаю веб-сайт, который будет использоваться в основном во внутренней сети.Я сталкиваюсь с очень расстраивающей проблемой с AJAX .NET.Чтобы объяснить проблему, сначала позвольте мне подробно рассказать о моей среде.

Я занимаюсь разработкой в ​​Visual Studio .NET 2010, ориентируясь на .NET Framework 4.0.Мой промежуточный сервер - это машина win7 utlimate, на которой установлена ​​полная конфигурация IIS 7.
Я использую MySql Server 5.1 в качестве сервера базы данных. На промежуточном сервере установлены необходимые коннекторы MySQL. Я использую класс Membership для аутентификации и авторизации моегопользователи.С mysql я следую этой статье, чтобы выполнить это: http://www.codeproject.com/KB/database/mysqlmembershipprovider.aspx Промежуточный сервер использует антивирус AVG вместе с брандмауэром Windows.Я использую toolKitScriptManager на всех своих страницах.

Приложение отлично работает в visual studio.Кроме того, при развертывании на промежуточном сервере он также отлично работает в любом браузере на промежуточном сервере.Веб-сайт также отлично работает на других компьютерах в моей сети, когда я получаю к нему доступ, связывая порт ip adderess: сервера.Теперь проблема в том, что после некоторого времени использования сайт просто зависает.Как в нем говорится, загрузка страницы в течение длительного времени, прежде чем в конечном итоге тайм-аут.Эта проблема исчезает, если я очищаю кеш и перезагружаю браузер, но появляется снова через некоторое время.Эта проблема наблюдается только на сетевых машинах.Мы никогда не сталкивались с этим в веб-браузерах промежуточного сервера.

Я преуспел в контролируемой повторной постановке проблемы.Всякий раз, когда страница загружается, и я нажимаю обновить на странице, появляется проблема.Если я вернусь и попытаюсь получить доступ к той же странице, нажав ссылку на страницу, она работает.Но если я нажимаю «обновить», страница просто продолжает загружаться и время ожидания истекает.

Я проверил сеть, используя панель инструментов разработчика Google Chrome и Firebug, и обнаружил, что всякий раз, когда возникает проблема, возникает какой-то веб-ресурс.Файлы axd и scriptresource.axd отображаются как «ожидающие решения».

Потратив более 15 дней на изучение Google для борьбы с этой проблемой, я безуспешно попробовал следующие средства:

Думая, что это может быть связано с лимитом одновременных подключений IIS7 на win 7Я протестировал его с минимальной нагрузкой, то есть только один пользователь, заходящий на сайт.Я также следил за рабочими процессами IIS, чтобы увидеть, нет ли там запросов, ожидающих обработки, но я не вижу ожидающих запросов. Проблема все еще существует.Думая, что это может быть связано с блокировкой брандмауэра, я отключил брандмауэр на своем промежуточном сервере.Проблема все еще там.Думая, что это как-то связано с моими настройками web.config, я тысячи раз проверял свой web.config на наличие ошибок, но все разделы не повреждены.Пожалуйста, смотрите файл web.config в конце этого списка для любых признаков проблемы. Ваши добрые предложения, пожалуйста.

Мой web.config следующий:

    <?xml version="1.0"?>
<configuration>
        <configSections>
                <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
                        <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
                                <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
                                </sectionGroup>
                        </sectionGroup>
                </sectionGroup>
        </configSections>
        <connectionStrings>
                <add name="ConnString" connectionString="Database=scsbackend;Data Source=localhost;User Id=xxxxx;Password=xxxx"/>
        </connectionStrings>
        <system.web>
                <sessionState mode="InProc" timeout="90000"></sessionState>
                <authorization>
                        <allow roles="Admin"/>
                        <allow roles="Tellecaller"/>
                        <deny users="?"/>
                </authorization>
                <authentication mode="Forms"/>
                <roleManager defaultProvider="MySqlRoleProvider" enabled="true" cacheRolesInCookie="true" cookieName=".ASPROLES" cookieTimeout="90000" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All">
                        <providers>
                                <clear/>
                                <add name="MySqlRoleProvider" type="Andri.Web.MySqlRoleProvider" connectionStringName="ConnString" applicationName="mysqlmembership" writeExceptionsToEventLog="true"/>
                        </providers>
                </roleManager>
                <membership defaultProvider="MySqlMembershipProvider" userIsOnlineTimeWindow="15">
                        <providers>
                                <clear/>
                                <add name="MySqlMembershipProvider" type="Andri.Web.MySqlMembershipProvider" connectionStringName="ConnString" applicationName="mysqlmembership" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="true" passwordFormat="Hashed" writeExceptionsToEventLog="true"/>
                        </providers>
                </membership>
                <pages validateRequest="false">
                        <controls>
                                <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                        </controls>
                        <tagMapping>
                                <add tagType="System.Web.UI.WebControls.CompareValidator" mappedTagType="Sample.Web.UI.Compatibility.CompareValidator, Validators, Version=1.0.0.0"/>
                                <add tagType="System.Web.UI.WebControls.CustomValidator" mappedTagType="Sample.Web.UI.Compatibility.CustomValidator, Validators, Version=1.0.0.0"/>
                                <add tagType="System.Web.UI.WebControls.RangeValidator" mappedTagType="Sample.Web.UI.Compatibility.RangeValidator, Validators, Version=1.0.0.0"/>
                                <add tagType="System.Web.UI.WebControls.RegularExpressionValidator" mappedTagType="Sample.Web.UI.Compatibility.RegularExpressionValidator, Validators, Version=1.0.0.0"/>
                                <add tagType="System.Web.UI.WebControls.RequiredFieldValidator" mappedTagType="Sample.Web.UI.Compatibility.RequiredFieldValidator, Validators, Version=1.0.0.0"/>
                                <add tagType="System.Web.UI.WebControls.ValidationSummary" mappedTagType="Sample.Web.UI.Compatibility.ValidationSummary, Validators, Version=1.0.0.0"/>
                        </tagMapping>
                </pages>
                <!--
          Set compilation debug="true" to insert debugging
          symbols into the compiled page. Because this
          affects performance, set this value to true only
          during development.
    -->
                <compilation debug="false" targetFramework="4.0">
                        <assemblies>
                                <add assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                                <add assembly="MySql.Data, Version=5.2.3.0, Culture=neutral, PublicKeyToken=C5687FC88969C44D"/>
                                <add assembly="System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                                <add assembly="System.Configuration.Install, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
                                <add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
                                <add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                                <add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                                <add assembly="Accessibility, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
                                <add assembly="System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                                <add assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
                                <add assembly="Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
                                <add assembly="System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                                <add assembly="System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                                <add assembly="System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                                <add assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                                <add assembly="System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
                                <add assembly="System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                                <add assembly="System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                                <add assembly="System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
                                <add assembly="System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                                <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                                <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                                <add assembly="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
                                <add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                                <add assembly="System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                                <add assembly="System.Data.Services.Client, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                                <add assembly="System.Data.Services.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                                <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                                <add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/></assemblies>
                </compilation>
                <httpHandlers>
                        <remove verb="*" path="*.asmx"/>
                        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                </httpHandlers>
                <httpModules>
                        <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                </httpModules>
        </system.web>
        <location path="Default.aspx">
                <system.web>
                        <authorization>
                                <allow roles="Admin"/>
                                <allow roles="Tellecaller"/>
                        </authorization>
                </system.web>
        </location>
        <location path="SCS_Webcontrol.aspx">
                <system.web>
                        <authorization>
                                <allow roles="Admin"/>
                                <allow roles="Tellecaller"/>
                        </authorization>
                </system.web>
        </location>
        <location path="M/scs.aspx">
                <system.web>
                        <authorization>
                                <allow roles="Admin"/>
                                <deny roles="Tellecaller"/>
                        </authorization>
                </system.web>
        </location>
        <location path="SCS_Reports.aspx">
                <system.web>
                        <authorization>
                                <allow roles="Admin"/>
                                <deny roles="Tellecaller"/>
                        </authorization>
                </system.web>
        </location>
        <location path="Webcontrol_WebService.asmx">
                <system.web>
                        <authorization>
                                <allow users="?"></allow>
                        </authorization>
                </system.web>
        </location>
        <system.webServer>
                <validation validateIntegratedModeConfiguration="false"/>
                <modules runAllManagedModulesForAllRequests="true">
                        <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                </modules>
                <handlers>
                        <remove name="WebServiceHandlerFactory-ISAPI-2.0"/>
                        <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                        <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                </handlers>
        </system.webServer>
</configuration>
...