Раздел модулей и обработчиков веб-форм asp.net - требуется ли удаление?

Ниже приведена конфигурация по умолчанию для веб-форм ASP.NET web.config для указания обработчиков и модулей в IIS 7 (.5).

Когда вы добавляете пользовательские модули и обработчики, я хотел бы знать, требуется ли удалить имя = «пользовательский модуль» перед добавлением записи модуля. Я не смог найти много информации об этом о том, требуется ли удаление и почему. Я видел несколько примеров, когда у них не было удаления.

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

Если кто-то может подтвердить, это будет очень признательно.

<system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules>
    <remove name="ScriptModule" />
    <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </modules>
  <handlers>
    <remove name="WebServiceHandlerFactory-Integrated"/>
    <remove name="ScriptHandlerFactory" />
    <remove name="ScriptHandlerFactoryAppServices" />
    <remove name="ScriptResource" />
    <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
         type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"
         type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.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=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </handlers>
</system.webServer>

person Alex J    schedule 15.02.2014    source источник


Ответы (1)


Посмотрите в MSDN, но в <add> страницу, вы прочтете это:

Директивы <add> обрабатываются последовательно сверху вниз. Если две или более поддирективы <add> задают одну и ту же комбинацию глагола/пути, последняя переопределяет все остальные.

Исходя из этого, чтобы директива <add> была переопределена, она должна иметь ту же комбинацию глагола/пути. Если они не совпадают, обе директивы активны, и это может вызвать конфликты.

Удаление существующих директив перед объявлением собственных является хорошей практикой во избежание конфликтов.

Изменить. Ваше приложение также наследует параметры из других файлов web.config (см. здесь для получения дополнительной информации). Это могут быть machine.config, корень web.config и т. д. Эти файлы также могут содержать объявления модулей и обработчиков. Добавление <remove> поможет избежать конфликтов с этими файлами.

person Tasos K.    schedule 15.02.2014
comment
но я не говорю о том, чтобы иметь одну и ту же комбинацию дважды. Если мне нужно добавить пользовательский модуль, нужно ли сначала указать удаление? Я прослежу, чтобы он присутствовал только один раз в разделе добавления. - person Alex J; 15.02.2014
comment
Добавление remove before — это просто практика лучше перестраховаться, чем сожалеть. Если вы на 100% уверены, что нет объявления с таким же именем, создающего конфликт, то нет, вам не нужно удалять его перед добавлением. - person Tasos K.; 15.02.2014
comment
Я обновил свой ответ о том, почему использование <remove> является хорошей идеей, даже если вы объявляете свой собственный обработчик только один раз. - person Tasos K.; 15.02.2014
comment
о каких конфликтах идет речь? знаете ли вы, что произойдет, приложение не будет работать сразу или в конечном итоге выйдет из строя? - person Alex J; 15.02.2014
comment
Вы на самом деле не можете знать, что произойдет. Обычно приложение работает, и когда оно пытается использовать обработчик, у которого есть конфликт, возникает ошибка или (не так часто) оно может работать, но с нежелательным поведением. - person Tasos K.; 15.02.2014