Pengaturan ASP.NET telah terdeteksi yang tidak berlaku dalam mode pipeline terkelola terintegrasi

401

Saya Menginstal DotNetOpenAuth SDK-3.4.5.10201.vsix dan saya tidak bisa membuatnya berfungsi. Ini berfungsi secara lokal (ketika saya menjalankan sebagai localhost) tetapi ketika saya mencoba untuk menerbitkannya tidak berfungsi.

Pesan kesalahan IIS yang saya dapatkan adalah

Ringkasan Kesalahan
HTTP Error 500.22 - Kesalahan Server Internal
Pengaturan ASP.NET telah terdeteksi yang tidak berlaku dalam mode pipeline dikelola terkelola.

DAN

Module       ConfigurationValidationModule  
Notification BeginRequest  
Handler      StaticFile  
Error Code   0x80070032  

lalu ada beberapa saran tentang cara mengatasi masalah:

Hal yang dapat Anda coba:

  • Migrasikan konfigurasi ke system.webServer/modulesbagian. Anda dapat melakukannya secara manual atau dengan menggunakan AppCmd ​​dari baris perintah - misalnya %SystemRoot%\system32\inetsrv\appcmd migrate config "Default Web Site/",. Menggunakan AppCmduntuk memigrasi aplikasi Anda akan memungkinkannya untuk bekerja dalam mode Terpadu, dan terus bekerja dalam mode Klasik dan pada versi IIS sebelumnya.

  • Jika Anda yakin tidak masalah untuk mengabaikan kesalahan ini, itu dapat dinonaktifkan dengan menyetel system.webServer/validation@validateIntegratedModeConfiguration ke false.

  • Atau, alihkan aplikasi ke kumpulan aplikasi mode Klasik - misalnya %SystemRoot%\system32\inetsrv\appcmd set app "Default Web Site/" /applicationPool:"Classic .NET AppPool",. Lakukan ini hanya jika Anda tidak dapat memigrasi aplikasi Anda.
    (Setel "Situs Web Default" dan "Classic .NET AppPool" ke jalur aplikasi dan nama kumpulan aplikasi Anda)

Tetapi masalahnya adalah bahwa saya tidak memiliki akses ke server ISS karena saya bukan pemiliknya. Apakah ada cara untuk menyelesaikan ini?

Mikael
sumber

Jawaban:

782

2 nd pilihan adalah yang Anda inginkan.

Di Anda web.config, pastikan kunci-kunci ini ada:

<configuration>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
    </system.webServer>
</configuration>
David
sumber
10
Ini seharusnya tidak benar-benar mempengaruhi keamanan aplikasi Anda. Itu hanya mematikan peringatan yang mengatakan Anda memiliki beberapa nilai konfigurasi yang tidak akan digunakan.
David
19
Ini bukan saran yang terlalu bagus jika Anda memiliki pengaturan yang tidak akan digunakan maka Anda harus menghapusnya.
Seph
33
@Seph, tidak setuju bahwa ini bukan saran yang masuk akal. Banyak instalasi NuGet (misalnya, DotLess) akan menambahkan entri ke bagian yang berlaku untuk mode terintegrasi, dan juga menduplikasi pengaturan itu untuk mode non-terintegrasi. Ini disebut portabilitas dan memungkinkan konfigurasi Anda berfungsi terlepas dari apakah Anda menggunakan IIS7 / terintegrasi atau klasik. Satu-satunya alasan untuk meninggalkan pengaturan validasi ini trueadalah agar Anda dapat meninggalkan roda pelatihan Anda dan IIS berteriak pada Anda setiap kali Anda menambahkan pengaturan yang tidak akan berfungsi dalam mode terintegrasi. Ini untuk yang belum berpengalaman, tapi menghalangi.
Kirk Woll
5
Konfigurasi seperti ini sangat mengganggu. @ MS: ada cara yang lebih baik.
yonexbat
3
Bagi mereka yang lebih suka memperbaiki kesalahan daripada menutupi gejala, saya telah memposting jawaban alternatif. Mengenai paket NuGet, mengapa kita masih menargetkan IIS 6 / Classic?
Jeremy Cook
104

Menambahkan <validation validateIntegratedModeConfiguration="false"/>alamat gejala, tetapi tidak sesuai untuk semua keadaan. Setelah membahas masalah ini beberapa kali, saya berharap dapat membantu orang lain tidak hanya mengatasi masalah tetapi juga memahaminya. (Yang menjadi semakin penting ketika IIS 6 memudar menjadi mitos dan rumor.)

Latar Belakang:

Masalah ini dan kebingungan seputar hal itu dimulai dengan pengenalan ASP.NET 2.0 dan IIS 7. IIS 6 telah dan terus memiliki hanya satu mode pipeline, dan itu setara dengan apa yang IIS 7+ sebut mode "Klasik". Mode pipa kedua, yang lebih baru, dan yang direkomendasikan untuk semua aplikasi yang berjalan pada IIS 7+ disebut mode "Terpadu".

Jadi, apa bedanya? Perbedaan utama adalah bagaimana ASP.NET berinteraksi dengan IIS.

  • Mode klasikterbatas pada pipa ASP.NET yang tidak dapat berinteraksi dengan pipa IIS. Pada dasarnya permintaan masuk dan jika IIS 6 / Classic telah diberitahu, melalui konfigurasi server, bahwa ASP.NET dapat mengatasinya maka IIS melepaskan permintaan ke ASP.NET dan melanjutkan. Arti penting ini dapat diperoleh dari sebuah contoh. Jika saya mengotorisasi akses ke file gambar statis, saya tidak akan dapat melakukannya dengan modul ASP.NET karena pipa IIS 6 akan menangani permintaan itu sendiri dan ASP.NET tidak akan pernah melihat permintaan itu karena mereka tidak pernah diserahkan . * Di sisi lain, mengesahkan pengguna mana yang dapat mengakses halaman .ASPX seperti permintaan untuk Foo.aspx adalah sepele bahkan dalam IIS 6 / Classic karena IIS selalu menyerahkan permintaan tersebut ke pipa ASP.NET. Dalam mode Klasik, ASP.NET tidak tahu apa yang dimilikinya.

  • Mode terintegrasi direkomendasikan karena modul dan penangan ASP.NET dapat berinteraksi langsung dengan pipa IIS. Pipa IIS tidak lagi hanya menyerahkan permintaan ke pipa ASP.NET, sekarang memungkinkan kode ASP.NET untuk menghubungkan langsung ke pipa IIS dan semua permintaan yang mengenai itu. Ini berarti bahwa modul ASP.NET tidak hanya dapat mengamati permintaan untuk file gambar statis, tetapi dapat mencegat permintaan tersebut dan mengambil tindakan dengan menolak akses, mencatat permintaan, dll.

Mengatasi kesalahan:

  1. Jika Anda menjalankan aplikasi yang lebih lama yang awalnya dibangun untuk IIS 6, mungkin Anda memindahkannya ke server baru, mungkin tidak ada yang salah dengan menjalankan kumpulan aplikasi dari aplikasi itu dalam mode Klasik. Silakan Anda tidak perlu merasa buruk.
  2. Kemudian lagi mungkin Anda memberikan aplikasi Anda facelift atau itu baik-baik saja sampai Anda menginstal perpustakaan pihak ke-3 melalui NuGet, secara manual, atau dengan cara lain. Dalam hal ini sepenuhnya mungkin httpHandlersatau httpModulestelah ditambahkan system.web. Hasilnya adalah kesalahan yang Anda lihat karena validateIntegratedModeConfigurationdefault true. Sekarang Anda memiliki dua pilihan:

    1. Hapus elemen httpHandlersdan httpModulesdari system.web. Ada beberapa kemungkinan hasil dari ini:
      • Semuanya berfungsi dengan baik, hasil yang umum;
      • Aplikasi Anda terus mengeluh, mungkin ada web.config di folder induk tempat Anda mewarisi, pertimbangkan untuk membersihkan web.config itu juga;
      • Anda tumbuh lelah dari menghapus httpHandlersdan httpModulesyang paket nuget terus menambah system.web, hey melakukan apa yang Anda butuhkan untuk.
  3. Jika orang-orang pilihan tidak bekerja atau masalah lebih dari itu layak maka aku tidak akan memberitahu Anda bahwa Anda tidak dapat mengatur validateIntegratedModeConfigurationuntuk false, tapi setidaknya Anda tahu apa yang Anda lakukan dan mengapa itu penting.

Bacaan yang bagus:

* Tentu saja ada cara untuk memasukkan semua hal aneh ke dalam pipa ASP.NET dari IIS 6 / Classic melalui mantera seperti pemetaan wildcard , jika Anda suka hal semacam itu.

Jeremy Cook
sumber
Solusi +1 saja bukanlah jawaban atas masalah Anda, tetapi solusi dengan penjelasan yang merupakan jawaban sempurna. Apa itu dan mengapa kita perlu mengubah ini, pertanyaan-pertanyaan jawaban yang diberikan oleh @Jeremy juru masak menjawab.
Rikin Patel
Penjelasan ini membuat saya memperbaiki masalah untuk situs uji kecil yang dihosting di IIS 7.5 dalam mode Terpadu. Ketika saya membuat proyek MVC baru, itu menambahkan httpModule, Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule di Web.config saya. Ini karena saya membiarkan opsi "Tambahkan Wawasan Aplikasi ke proyek" dicentang saat membuat proyek aplikasi Web ASP.NET baru. Ketika saya menghapus httpModule dari Web.config, situs tersebut berfungsi tanpa kesalahan. Pengaturan validateIntegratedModeConfiguration ke false berfungsi, tapi itu hanya pendekatan bandaid.
iCode
2
Pengaturan ASP.NET telah terdeteksi yang tidak berlaku dalam mode pipeline terkelola terintegrasi. Ini adalah pesan kesalahan Microsoft yang tidak berguna. ASP.net memiliki ribuan pengaturan tetapi Microsoft tidak berpikir untuk memasukkan yang menyebabkan kesalahan dalam teks kesalahan. MS dijalankan oleh marketer daripada insinyur jadi jangan berharap hal-hal membaik dalam waktu dekat. :-(
Paul McCarthy
35

Jika Anda masih perlu menggunakan Modul HTTP, Anda harus mengonfigurasinya (.NET 4.0 framework) sebagai berikut:

<system.webServer>
   <modules runAllManagedModulesForAllRequests="true">
       <add name="MyModule" type="[Namespace].[Class], [assembly]"/>
   </modules>
   <validation validateIntegratedModeConfiguration="false"/>
</system.webServer>
Ashraf Sayied-Ahmad
sumber
2
Saya pikir properti HttpModules di system.web adalah untuk ASP 3.5 atau sebelumnya. Untuk ASP 4 atau lebih tinggi, gunakan modul di system.webserver
Trio Cheung
1
@ HoyCheung sebenarnya masalah menggunakan pipa Terpadu atau Klasik, bukan versi .Net, yang memutuskan apakah akan menggunakan system.web / httpModules atau system.webServer / modules.
Pauli Østerø
29

Saya mengalami masalah ini tetapi memiliki perbaikan yang berbeda. Itu melibatkan memperbarui Control Panel>Administrative Tools>IIS Managerdan mengembalikan Pipa Terkelola situs App saya dari Integratedmenjadi Classic.

Gaʀʀʏ
sumber
3
Setuju - ini adalah opsi yang lebih baik daripada hanya menyembunyikan kesalahan! Pastikan Anda menggunakan App Pool yang benar - harus Classic tidak Terintegrasi
Swomble
1
Saya menggunakan visual studio 2012, bagaimana saya bisa mengubah kumpulan aplikasi ke klasik.
10
Ini bukan solusi yang baik jika Anda ingin menggunakan semua fitur baru yang tersedia di Pipa Terpadu. Ini seperti mengatakan kembali ke .NET 2.0 dari 4.0 karena masalah.
Trevor de Koekkoek
Untuk melakukan ini di IIS Manager, buka Application Poolsdi pohon di sebelah kiri, klik dua kali pada kumpulan yang ingin Anda ubah, dan pilih mode pipa.
Steve Smith
8

Periksa apakah ada konflik dalam otentikasi IIS Anda. yaitu Anda mengaktifkan otentikasi anonim dan peniruan ASP.NET keduanya dapat menyebabkan kesalahan juga.

Jim Yu
sumber
5

Di web.config Anda, pastikan kunci-kunci ini ada:

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

Serta memeriksa Asp.Net Impresonation = Nonaktifkan Dalam Autorisasi Situs IIS

Nol
sumber
3

Saya mengalami masalah ini dan terinspirasi oleh jawaban @Jeremy Cook, saya menggigit peluru untuk mencari tahu apa yang menyebabkan IIS 7 mode Terpadu tidak menyukai web.config saya. Inilah skenario saya:

  1. API Web (versi 4.0.030506.0 alias yang lama)
  2. .NET 4.0
  3. Routing Atribut 3.5.6 untuk API Web [peringatan spoiler: orang ini!]

Saya ingin menggunakan atribut routing dalam suatu proyek yang (sayangnya) harus menggunakan .NET 4 dan karenanya tidak dapat menggunakan Web API 2.2 (yang membutuhkan .NET 4.5). Paket NuGet yang bermaksud baik menambahkan bagian ini di bawah <system.web>bagian:

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

[Saya katakan bermaksud baik, karena bagian ini diperlukan pada versi IIS yang lebih lama]

Menghapus bagian ini membuat saya melewati HTTP 500.23 !!

Rangkuman: Saya mendukung kata-kata Jeremy bahwa penting untuk memahami mengapa segala sesuatunya tidak berfungsi daripada hanya "menutupi gejalanya". Bahkan jika Anda harus menutupi gejalanya, Anda tahu apa yang Anda lakukan (dan mengapa) :-)

Sudhanshu Mishra
sumber
Terima kasih. Saya menambahkan AttributeRouting, termasuk paket NuGet add-on Kontroler Api, dan menghapus bagian yang Anda indikasikan dari web.config menyelesaikan masalah. Namun, saya sedikit khawatir karena aplikasi web MVC saya sudah menggunakan .NET framework 4.5.
Robert Oschler
2
@ RobertTschschler jika Anda menggunakan .NET 4.5, Anda sudah memiliki atribut routing yang dibangun di AFAIK - Anda tidak perlu NuGet ini?
Sudhanshu Mishra
Terima kasih dan omong kosong. Sudah beberapa jam hari ini mendapatkan paket AttributeRouting menjalankan NuGet. Saya menariknya dan melepaskan semua kode "perbaikan" yang saya tambahkan untuk membuatnya berfungsi, dan menggantikan atribut Web API 2 Route () untuk atribut GET (). Bekerja dengan baik. Kami benar-benar membutuhkan sistem pakar hari ini hanya untuk membantu kami dengan semua paket ini.
Robert Oschler
2

Ini bekerja untuk saya:

  1. Hapus situs yang awalnya dibuat.
  2. Buat kembali situs di IIS
  3. Solusi bersih
  4. Bangun solusi

Sepertinya ada sesuatu yang pergi ke selatan ketika saya awalnya membuat situs. Saya benci solusi yang mirip dengan "Restart mesin Anda, lalu instal ulang windows" tanpa mengetahui apa yang menyebabkan kesalahan. Tetapi, ini berhasil bagi saya. Cepat dan sederhana. Semoga ini bisa membantu orang lain.

Paul
sumber
0

Dalam kasus saya, saya kehilangan dll di folder bin yang direferensikan dalam file web.config. Jadi periksa apakah Anda menggunakan pengaturan apa pun di web.config tetapi sebenarnya tidak memiliki dll.

Terima kasih

naveen rawat
sumber
0

Butuh waktu beberapa jam untuk menyelesaikan ini karena semua dari pengaturan yang saya temukan di sini tentang kesalahan ini adalah sama tetapi masih tidak berhasil. Masalahnya adalah bahwa saya memiliki folder di layanan web saya dari mana file harus dikirim ke perangkat WinCE, setelah mengkonversi folder itu ke aplikasi dengan Classic.NetAppPool mulai berfungsi.

Mladen Radosović
sumber
0

Langkah di bawah menyelesaikan masalah saya:

Buka CMDPrompt dengan Hak Istimewa Admin.

Lari : iisreset.

Semoga ini membantu.

shaijut
sumber
-1

Metode untuk lokal Adalah kesalahan

gambar

hossein khazai
sumber
7
Jangan ubah pengaturan ini kecuali Anda benar-benar tahu apa yang Anda lakukan. Ini hampir tidak pernah merupakan jawaban yang benar.
NickG