Виявлено налаштування ASP.NET, яке не застосовується в режимі інтегрованого керованого конвеєра


401

Я встановив 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/validation@validateIntegratedModeConfiguration значення false.

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

Але проблема полягає в тому, що я не маю доступу до сервера ISS, оскільки я не є його власником. Чи є спосіб вирішити це?

Відповіді:


782

2 - й варіант, який ви хочете.

У ваших web.config, переконайтеся , що ці ключі існують:

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

10
Це дійсно не повинно впливати на безпеку вашого додатка. Це просто вимикає попередження, яке говорить про те, що у вас є деякі значення конфігурації, які не використовуватимуться.
Давид

19
Це насправді не надто обгрунтована порада, якщо у вас є налаштування, які не використовуватимуться, тоді слід видалити їх.
Seph

33
@Seph, не погоджуйся, що це не розумна порада. Багато установок NuGet (наприклад, DotLess) додаватимуть записи до розділів, що застосовуються до інтегрованого режиму, а також дублюють це налаштування для неінтегрованого режиму. Це називається портативністю і дозволяє вашій конфігурації працювати незалежно від того, використовуєте ви IIS7 / інтегровану чи класичну. Єдина причина, щоб залишити цей параметр перевірки, trueце те, що ви можете залишити свої тренувальні колеса і кричати IIS, коли ви додасте налаштування, яке не працюватиме в інтегрованому режимі. Це для недосвідчених, але заважає.
Кірк Волл

5
Така конфігурація дратує. @MS: є кращий спосіб.
yonexbat

3
Для тих, хто вважає за краще виправляти помилки над маскуванням симптомів, я опублікував альтернативну відповідь. Щодо пакунків NuGet, чому ми все ще орієнтуємось на IIS 6 / Classic?
Джеремі Кук

104

Додавання <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 ніколи не побачить ці запити, оскільки їх ніколи не передавали . * З іншого боку, авторизація користувачів, які можуть отримати доступ до сторінки. У класичному режимі ASP.NET не знає, що це "

  • Рекомендується вбудований режим , оскільки обробники та модулі ASP.NET можуть взаємодіяти безпосередньо з трубопроводом IIS. Більше того, конвеєр IIS просто не передає запит на трубопровід ASP.NET, тепер він дозволяє коду ASP.NET підключитися безпосередньо до трубопроводу IIS та всіх запитів, які потрапили в нього. Це означає, що модуль ASP.NET може не лише спостерігати за запитами до статичних файлів зображень, але й може перехоплювати ці запити та вживати заходів, забороняючи доступ, реєструючи запит тощо.

Подолання помилки:

  1. Якщо ви використовуєте старіший додаток, який спочатку був створений для IIS 6, можливо, ви перемістили його на новий сервер, можливо, у запуску пулу додатків цієї програми в класичному режимі може бути абсолютно нічого поганого. Вперед не потрібно почувати себе погано.
  2. Знову ж таки, можливо, ви надаєте вашій програмі ліфтинг обличчя, або це було чудово, якщо ви не встановили сторонню бібліотеку через NuGet, вручну або якимись іншими способами. У цьому випадку це цілком можливо httpHandlersабо до httpModulesних додано system.web. Результатом є помилка, яку ви бачите через те, що validateIntegratedModeConfigurationза замовчуванням true. Тепер у вас є два варіанти:

    1. Видаліть httpHandlersі httpModulesелементи з system.web. Є кілька можливих результатів від цього:
      • Все працює добре, спільний результат;
      • Ваша заявка продовжує скаржитися, можливо, у батьківській папці, з якої ви успадковуєтесь, може бути web.config, також можете очистити цей веб-конфіг;
      • Вам стає втомлено видаляти httpHandlersі httpModulesте, що пакунки NuGet продовжують додавати system.web, робите все, що вам потрібно.
  3. Якщо ці варіанти не працюють або більше проблем , ніж вона коштує , то я не збираюся говорити вам , що ви не можете встановити validateIntegratedModeConfigurationна false, але , по крайней мере , ви знаєте , що ви робите і чому це важливо.

Добре читає:

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


Рішення лише +1 - це не відповідь на вашу проблему, а рішення з поясненням, яке є ідеальною відповіддю. Що це таке і чому нам потрібно це змінити, на ці запитання відповідей, які дав кухар @Jeremy, відповідають.
Рікін Патель

Це пояснення призвело до вирішення проблеми для невеликого тестового сайту, розміщеного в IIS 7.5 в інтегрованому режимі. Коли я створив новий проект MVC, він додав у свій Web.config httpModule, Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule. Це тому, що під час створення нового проекту ASP.NET Web Aapplication я залишив прапорець "Додати додаткові статистики до проекту". Коли я видалив httpModule з Web.config, сайт працював без помилок. Встановлення значення validateIntegratedModeConfiguration на хибну роботу, але це був лише підхід на бандаїдах.
iCode

2
Виявлено налаштування ASP.NET, яке не застосовується в режимі інтегрованого керованого конвеєра. Це ще одне непотрібне повідомлення про помилку Microsoft. ASP.net має тисячі налаштувань, але Microsoft не думає включати те, що викликає помилку, у тексті помилки. MS управляють маркетологами, а не інженерами, тому не сподівайтеся, що справи скоро покращаться. :-(
Пол Маккарті

35

Якщо вам все-таки потрібно використовувати модуль HTTP, вам потрібно його налаштувати (.NET 4.0 Framework) наступним чином:

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

2
Я думаю, що властивість HttpModules в system.web призначена для ASP 3.5 або раніше. Для ASP 4 або вище використовуйте модулі в system.webserver
Trio Cheung

1
@HoyCheung насправді питання використання інтегрованого або класичного конвеєра, а не тієї версії .Net, яка вирішує, використовувати систему system.web / httpModules або system.webServer / модулі.
Pauli Østerø

29

Я зіткнувся з цим питанням, але мав інше виправлення. Це стосувалося оновлення Control Panel>Administrative Tools>IIS Managerта повернення керованого конвеєра сайту мого додатка Integratedдо Classic.


3
Погоджено - це кращий варіант, а не просто приховування помилки! Переконайтеся, що ви використовуєте правильний пул додатків - це має бути класичний, а не інтегрований
прошийте

1
Я використовую візуальну студію 2012, як я можу змінити пул додатків на класичний.

10
Це не гарне рішення, якщо ви хочете використовувати всі нові функції, доступні в інтегрованому трубопроводі. Це як би сказати про повернення до .NET 2.0 з 4.0 через проблему.
Trevor de Koekkoek

Для цього в IIS Manager перейдіть до Application Poolsдерева зліва, двічі клацніть на пулі, який ви хочете змінити, і виберіть режим трубопроводу.
Стів Сміт

8

Перевірте, чи є конфлікт у вашій аутентифікації IIS. тобто увімкнено анонімну автентифікацію та інформування ASP.NET і те, і інше може призвести до помилки.


5

У вашому web.config переконайтесь, що ці ключі існують:

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

А також перевірити імпресонацію Asp.Net = Вимкнути в автоматизації сайту IIS


3

Я зіткнувся з цією проблемою і надихнувшись відповіддю @ Джеремі Кука, я кусав кулю, щоб дізнатися, що чорт викликав IIS 7 Integrated mode, що не подобається моєму web.config. Ось мій сценарій:

  1. Веб-API (версія 4.0.030506.0 також стара)
  2. .NET 4.0
  3. Attribute Routing 3.5.6 для Web 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 !!

Короткий зміст: Я другого слова Джеремі про те, що важливо зрозуміти, чому все не працює, а не просто "маскувати симптом". Навіть якщо вам доведеться замаскувати симптом, ви знаєте, що ви робите (і чому) :-)


Дякую. Я додав AttributeRouting, включаючи додаток NuGet для додатка Api Controller, і видалив розділ, який ви вказали з web.config, вирішив проблему. Однак мене мало хвилює, оскільки мій веб-додаток MVC вже використовував .NET Framework 4.5.
Роберт Ошлер

2
@RobertOschler, якщо ви перебуваєте на .NET 4.5, у вас вже є вбудована маршрутизація атрибутів в AFAIK - вам не потрібно цього NuGet?
Sudhanshu Mishra

Спасибі і лайно. Сьогодні пройшло кілька годин, щоб отримати пакет AttributeRouting під управлінням NuGet. Я витягнув його та скасував усі коди "виправлення", які я додав, щоб він працював, і замінив атрибут Web API 2 Route () на атрибут GET (). Працювали чудово. Нам справді потрібна експертна система саме для того, щоб допомогти нам у виконанні всіх цих пакетів.
Роберт Ошлер

2

Це працювало для мене:

  1. Видаліть спочатку створений сайт.
  2. Відтворити сайт в IIS
  3. Чистий розчин
  4. Будувати рішення

Здається, що щось пішло на південь, коли я спочатку створив сайт. Я ненавиджу рішення, схожі на "Перезавантажте машину, потім перевстановіть Windows", не знаючи, що спричинило помилку. Але це працювало для мене. Швидкий і простий. Сподіваюся, це допоможе комусь іншому.


0

У моєму випадку мені не вистачало dll у папці bin, на яку посилалось у файлі web.config. Тому перевірте, чи використовували ви будь-які налаштування в web.config, але насправді у вас немає dll.

Дякую


0

Щоб вирішити цю проблему, мені знадобилося кілька годин, тому що всі налаштування, які я знайшов тут щодо цієї помилки, були однаковими, але вона все ще не працювала. Проблема полягала в тому, що у мене в папці веб-служби була папка, з якої файл повинен бути надісланий на пристрій WinCE, після перетворення цієї папки в додаток з Classic.NetAppPool вона почала працювати.


0

Нижче описано мою проблему:

відчинено CMD підказку з правами адміністратора.

Виконати: iisreset.

Сподіваюсь, це допомагає.


-1

Метод локального - це помилка

зображення


7
Не змінюйте цей параметр, якщо ви дійсно не знаєте, що робите. Це майже ніколи правильна відповідь.
NickG
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.