Обнаружен параметр ASP.NET, который не применяется в режиме интегрированного управляемого конвейера

Я установил DotNetOpenAuth SDK-3.4.5.10201.vsix, и я не могу заставить его работать. Он работает локально (когда я запускаю как localhost), но когда я пытаюсь опубликовать его, он не работает.

Сообщение об ошибке IIS, которое я получаю, это

Краткое описание ошибки
  Ошибка HTTP 500.22 - Внутренняя ошибка сервера
  Обнаружен параметр ASP.NET, который не применяется в режиме интегрированного управляемого конвейера.

и

Module       ConfigurationValidationModule  
Notification BeginRequest  
Handler      StaticFile  
Error Code   0x80070032  

то есть предложения по решению проблемы:

Что вы можете попробовать:

  • Перенесите конфигурацию в     system.webServer/modules. Вы    может сделать это вручную или с помощью AppCmd    из командной строки - например,    %SystemRoot%\system32\inetsrv\appcmd migrate config "Default Web Site/".    Использование AppCmd для переноса    приложение позволит ему работать в    Интегрированный режим и продолжить работу    в классическом и предыдущем    версии IIS.

  • Если вы уверены, что все в порядке    игнорировать эту ошибку, ее можно отключить    установив     system.webServer/[email protected]   к ложному.

  • Альтернативно, переключите приложение    в пул приложений в классическом режиме -    например,     %SystemRoot%\system32\inetsrv\appcmd set app "Default Web Site/" /applicationPool:"Classic .NET AppPool". Только делайте это, если вы    не удалось перенести приложение.
       (Установите "Веб-сайт по умолчанию" и "Классический .NET AppPool" для вашего пути к программе и имени пула приложений)

Но проблема в том, что у меня нет доступа к серверу ISS, поскольку я не являюсь его владельцем. Есть ли способ решить это?

Ответ 1

Параметр 2 nd - тот, который вы хотите.

В web.config убедитесь, что эти ключи существуют:

<configuration>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
    </system.webServer>
</configuration>

Ответ 2

Добавление <validation validateIntegratedModeConfiguration="false"/> устраняет симптом, но не подходит для всех обстоятельств. Несколько раз сталкиваясь с этой проблемой, я надеюсь помочь другим не только преодолеть проблему, но и понять ее. (Что становится все более важным, поскольку IIS 6 исчезает в мифе и слухи.)

Фон:

Эта проблема и путаница вокруг нее начались с внедрения ASP.NET 2.0 и IIS 7. У IIS 6 был и остается только один режим конвейера, и он эквивалентен тому, что IIS 7+ вызывает "классический" режим. Второй, более новый и рекомендуемый режим конвейера для всех приложений, работающих на IIS 7+, называется "Интегрированный" режим.

Итак, какая разница? Основное различие заключается в том, как ASP.NET взаимодействует с IIS.

  • Классический режим ограничен конвейером ASP.NET, который не может взаимодействовать с конвейером IIS. По сути, приходит запрос, и если IIS 6/Classic было сказано через конфигурацию сервера, что ASP.NET может справиться с этим, IIS отдает запрос ASP.NET и переходит дальше. Значение этого можно почерпнуть из примера. Если бы я разрешил доступ к файлам статического изображения, я бы не смог сделать это с помощью модуля ASP.NET, потому что конвейер IIS 6 будет обрабатывать эти запросы сам, и ASP.NET никогда не увидит эти запросы, потому что они никогда не были переданы. С другой стороны, авторизация доступа пользователей к странице .ASPX, такой как запрос для Foo.aspx, является тривиальной даже в IIS 6/Classic, поскольку IIS всегда передает эти запросы в конвейер ASP.NET. В классическом режиме ASP.NET не знает, что ему не было сказано, и есть много того, что IIS 6/Classic может не сообщать об этом.

  • Рекомендуется использовать встроенный режим, поскольку обработчики и модули ASP.NET могут напрямую взаимодействовать с конвейером IIS. Конвейер IIS больше не передает запрос на конвейер ASP.NET, теперь он позволяет коду ASP.NET напрямую подключаться к конвейеру IIS и всем запросам, которые его ударили. Это означает, что модуль ASP.NET может не только наблюдать запросы к файлам статического изображения, но и перехватывать эти запросы и предпринимать действия, запрещая доступ, регистрируя запрос и т.д.

Преодоление ошибки:

  • Если вы запускаете старое приложение, которое изначально было создано для IIS 6, возможно, вы перенесли его на новый сервер, не может быть абсолютно ничего плохого в запуске пула приложений этого приложения в классическом режиме. Идите вперед, вам не нужно плохо себя чувствовать.
  • И снова, возможно, вы подаете свое приложение подтяжку лица, или оно прекрасно работает, пока вы не установили стороннюю библиотеку через NuGet, вручную или каким-либо другим способом. В этом случае возможно httpHandlers или httpModules добавлено к system.web. Результатом является ошибка, которую вы видите, потому что validateIntegratedModeConfiguration по умолчанию true. Теперь у вас есть два варианта:

    • Удалите элементы httpHandlers и httpModules из system.web. Есть несколько возможных результатов из этого:
      • Все работает отлично, общий результат;
      • Ваше приложение продолжает жаловаться, может быть файл web.config в родительской папке, из которой вы наследуете, также подумайте об очистке этого web.config;
      • Вы устали от удаления httpHandlers и httpModules, которые пакеты NuGet продолжают добавлять в system.web, ну, сделайте то, что вам нужно.
  • Если эти параметры не работают или больше проблем, чем это того стоит, я не буду говорить вам, что вы не можете установить validateIntegratedModeConfiguration в false, но по крайней мере вы знаете, что делаете и почему это имеет значение.

Хорошо читает:

* Конечно, есть способы получить все странные вещи в конвейере ASP.NET из IIS 6/Classic с помощью заклинаний, таких как подстановочные сопоставления, если вам нравится такая штука.

Ответ 3

Если вам все еще нужно использовать HTTP-модуль, вам необходимо его настроить (инфраструктура .NET 4.0) следующим образом:

<system.webServer>
   <modules runAllManagedModulesForAllRequests="true">
       <add name="MyModule" type="[Namespace].[Class], [assembly]"/>
   </modules>
   <validation validateIntegratedModeConfiguration="false"/>
</system.webServer>

Ответ 4

Я столкнулся с этой проблемой, но имел другое исправление. Он включал обновление Control Panel>Administrative Tools>IIS Manager и возврат моей управляемой конвейерной площадки приложения с Integrated до Classic.

Ответ 5

Проверьте, нет ли конфликта в вашей аутентификации IIS. то есть вы включите анонимную аутентификацию и олицетворение ASP.NET, оба могут вызвать ошибку.

Ответ 6

Это сработало для меня:

  • Удалить созданный сайт.
  • Восстановить сайт в IIS
  • Чистое решение
  • Построить решение

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

Ответ 7

Я столкнулся с этой проблемой и воодушевлен ответом @Jeremy Cook, я укусил пулю, чтобы узнать, что, черт возьми, привело к тому, что IIS 7 Integrated mode не понравился мой web.config. Здесь мой сценарий:

  • Web API (версия 4.0.030506.0, старая)
  • .NET 4.0
  • Маршрутизация атрибутов 3.5.6 для веб-API [оповещение о спойлере: это был этот парень!]

Я хотел использовать маршрутизацию атрибутов в проекте, который (к сожалению) должен был использовать .NET 4 и, следовательно, не мог использовать Web API 2.2 (для которого требуется .NET 4.5). Нужный пакет NuGet добавил этот раздел в разделе <system.web>:

<system.web>
<httpHandlers>
      <add verb="*" path="routes.axd" type="AttributeRouting.Web.Logging.LogRoutesHandler, AttributeRouting.Web" />
    </httpHandlers>
</system.web>

[Я говорю хорошо, потому что эта часть требуется для более старых версий IIS]

Удаление этого раздела привело меня к HTTP 500.23!

Резюме: Я повторяю, что Джереми говорит, что важно понять, почему все не работает, а не просто "маскирует симптом". Даже если вам нужно замаскировать симптом, вы знаете, что делаете (и почему): -)

Ответ 8

В вашем web.config убедитесь, что эти ключи существуют:

<configuration>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
    </system.webServer>
</configuration>

Также проверьте Asp.Net Impresonation = Disable. В Authentication сайта IIS

Ответ 9

В моем случае мне не хватало dll в папке bin, на которую ссылался файл web.config. Поэтому проверьте, используете ли вы какие-либо настройки в web.config, но на самом деле не имеете dll.

Спасибо

Ответ 10

Метод для локального является ошибкой

image