Một cài đặt ASP.NET đã được phát hiện không áp dụng trong chế độ đường ống được quản lý tích hợp


401

Tôi đã cài đặt DotNetOpenAuth SDK-3.4.5.10201.vsix và tôi không thể làm cho nó hoạt động được. Nó hoạt động cục bộ (khi tôi chạy như localhost) nhưng khi tôi cố gắng xuất bản thì nó không hoạt động.

Thông báo lỗi IIS tôi nhận được là

Tóm tắt lỗi Lỗi
HTTP 500,22 - Lỗi máy chủ nội bộ
Một cài đặt ASP.NET đã được phát hiện không áp dụng trong chế độ đường ống được quản lý tích hợp.

Module       ConfigurationValidationModule  
Notification BeginRequest  
Handler      StaticFile  
Error Code   0x80070032  

sau đó có một số gợi ý về cách giải quyết vấn đề:

Những điều bạn có thể thử:

  • Di chuyển cấu hình đến system.webServer/modulesphần. Bạn có thể làm như vậy bằng tay hoặc bằng cách sử dụng AppCmd ​​từ dòng lệnh - ví dụ : %SystemRoot%\system32\inetsrv\appcmd migrate config "Default Web Site/". Sử dụng AppCmdđể di chuyển ứng dụng của bạn sẽ cho phép ứng dụng hoạt động ở chế độ Tích hợp và tiếp tục hoạt động ở chế độ Cổ điển và trên các phiên bản IIS trước đó.

  • Nếu bạn chắc chắn rằng có thể bỏ qua lỗi này, nó có thể bị vô hiệu hóa bằng cách đặt system.webServer/validation@validateIntegratedModeConfiguration thành false.

  • Hoặc, chuyển ứng dụng sang nhóm ứng dụng Chế độ cổ điển - ví dụ : %SystemRoot%\system32\inetsrv\appcmd set app "Default Web Site/" /applicationPool:"Classic .NET AppPool". Chỉ làm điều này nếu bạn không thể di chuyển ứng dụng của bạn.
    (Đặt "Trang web mặc định" và "Classic .NET AppPool" cho đường dẫn ứng dụng và tên nhóm ứng dụng của bạn)

Nhưng vấn đề là tôi không có quyền truy cập vào máy chủ ISS vì tôi không phải là chủ sở hữu của nó. Có cách nào để giải quyết điều này?

Câu trả lời:


782

2 nd lựa chọn là một trong những bạn muốn.

Trong của bạn web.config, đảm bảo các khóa này tồn tại:

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

10
Điều này không thực sự ảnh hưởng đến bảo mật ứng dụng của bạn. Nó chỉ tắt cảnh báo nói rằng bạn có một số giá trị cấu hình sẽ không được sử dụng.
David

19
Đây thực sự không phải là lời khuyên quá mức nếu bạn có các cài đặt không được sử dụng thì bạn nên xóa chúng.
Seph

33
@Seph, không đồng ý rằng đây không phải là lời khuyên. Rất nhiều cài đặt NuGet (ví dụ: DotLess) sẽ thêm các mục vào các phần áp dụng cho chế độ tích hợp và cũng sao chép cài đặt đó cho chế độ không tích hợp. Điều này được gọi là tính di động và cho phép cấu hình của bạn hoạt động bất kể bạn đang sử dụng IIS7 / tích hợp hay cổ điển. Lý do duy nhất để rời khỏi cài đặt xác thực này truelà để bạn có thể rời khỏi bánh xe huấn luyện của mình và bật IIS lên khi bạn thêm cài đặt không hoạt động ở chế độ tích hợp. Điều này là dành cho người thiếu kinh nghiệm, nhưng gặp trở ngại.
Kirk Woll

5
Loại cấu hình này là gây phiền nhiễu. @MS: có một cách tốt hơn.
yonexbat

3
Đối với những người thích sửa lỗi hơn các triệu chứng che lấp, tôi đã đăng một câu trả lời thay thế. Liên quan đến các gói NuGet, tại sao chúng tôi vẫn nhắm mục tiêu IIS 6 / Classic?
Jeremy Cook

104

Thêm <validation validateIntegratedModeConfiguration="false"/>địa chỉ các triệu chứng, nhưng không phù hợp cho mọi trường hợp. Đã chạy xung quanh vấn đề này một vài lần, tôi hy vọng sẽ giúp những người khác không chỉ khắc phục vấn đề mà còn hiểu nó. (Điều này càng trở nên quan trọng hơn khi IIS 6 mờ dần thành huyền thoại và tin đồn.)

Lý lịch:

Vấn đề này và sự nhầm lẫn xung quanh nó bắt đầu với việc giới thiệu ASP.NET 2.0 và IIS 7. IIS 6 đã có và tiếp tục chỉ có một chế độ đường ống và nó tương đương với cái mà IIS 7+ gọi là chế độ "Cổ điển". Chế độ đường ống thứ hai, mới hơn và được đề xuất cho tất cả các ứng dụng chạy trên IIS 7+ được gọi là chế độ "Tích hợp".

Vì vậy, sự khác biệt là gì? Sự khác biệt chính là cách ASP.NET tương tác với IIS.

  • Chế độ cổ điểnđược giới hạn trong một đường dẫn ASP.NET không thể tương tác với đường ống IIS. Về cơ bản, một yêu cầu xuất hiện và nếu IIS 6 / Classic đã được thông báo, thông qua cấu hình máy chủ, ASP.NET có thể xử lý nó sau đó IIS sẽ chuyển yêu cầu tới ASP.NET và tiếp tục. Tầm quan trọng của điều này có thể được lượm lặt từ một ví dụ. Nếu tôi cho phép truy cập vào các tệp hình ảnh tĩnh, tôi sẽ không thể thực hiện được với mô-đun ASP.NET vì đường dẫn IIS 6 sẽ tự xử lý các yêu cầu đó và ASP.NET sẽ không bao giờ thấy các yêu cầu đó vì chúng không bao giờ được xử lý Mặt khác. Trong chế độ Cổ điển, ASP.NET không biết nó có gì '

  • Chế độ tích hợp được khuyến nghị vì các trình xử lý và mô-đun ASP.NET có thể tương tác trực tiếp với đường ống IIS. Không còn đường dẫn IIS đơn giản chuyển yêu cầu đến đường ống ASP.NET, giờ đây, nó cho phép mã ASP.NET nối trực tiếp vào đường dẫn IIS và tất cả các yêu cầu đánh vào nó. Điều này có nghĩa là một mô-đun ASP.NET không chỉ có thể quan sát các yêu cầu đối với các tệp hình ảnh tĩnh mà còn có thể chặn các yêu cầu đó và thực hiện hành động bằng cách từ chối truy cập, ghi nhật ký yêu cầu, v.v.

Khắc phục lỗi:

  1. Nếu bạn đang chạy một ứng dụng cũ ban đầu được xây dựng cho IIS 6, có lẽ bạn đã chuyển nó sang một máy chủ mới, có thể hoàn toàn không có gì sai khi chạy nhóm ứng dụng của ứng dụng đó ở chế độ Cổ điển. Đi trước bạn không phải cảm thấy xấu.
  2. Sau đó, một lần nữa, có thể bạn đang cung cấp cho ứng dụng của mình một ứng dụng trực tiếp hoặc nó đang hoạt động tốt cho đến khi bạn cài đặt thư viện của bên thứ 3 thông qua NuGet, bằng tay hoặc bằng một số phương tiện khác. Trong trường hợp đó, nó hoàn toàn có thể httpHandlershoặc httpModulesđã được thêm vào system.web. Kết quả là lỗi mà bạn đang thấy vì validateIntegratedModeConfigurationmặc định true. Bây giờ bạn có hai lựa chọn:

    1. Loại bỏ các yếu tố httpHandlershttpModulestừ system.web. Có một vài kết quả có thể xảy ra từ việc này:
      • Mọi thứ hoạt động tốt, một kết quả chung;
      • Ứng dụng của bạn tiếp tục phàn nàn, có thể có một web.config trong thư mục mẹ mà bạn đang kế thừa, hãy xem xét việc dọn sạch web.config đó;
      • Bạn trở nên mỏi mệt của tháo httpHandlershttpModulesrằng các gói NuGet giữ thêm vào system.web, hey làm những gì bạn cần.
  3. Nếu các tùy chọn đó không hoạt động hoặc gặp nhiều rắc rối hơn giá trị thì tôi sẽ không nói với bạn rằng bạn không thể đặt validateIntegratedModeConfigurationra false, nhưng ít nhất bạn biết bạn đang làm gì và tại sao nó lại quan trọng.

Đọc tốt:

* Tất nhiên có nhiều cách để đưa tất cả những thứ lạ vào đường dẫn ASP.NET từ IIS 6 / Classic thông qua các câu thần chú như ánh xạ ký tự đại diện , nếu bạn thích kiểu đó.


Giải pháp duy nhất +1 không phải là câu trả lời cho vấn đề của bạn mà là giải pháp với lời giải thích là câu trả lời hoàn hảo. Nó là gì và tại sao chúng ta cần thay đổi điều này, những câu hỏi trả lời được đưa ra bởi @Jeremy cook answer.
Rikin Patel

Giải thích này đã khiến tôi khắc phục sự cố cho một trang web thử nghiệm nhỏ được lưu trữ trong IIS 7.5 ở chế độ Tích hợp. Khi tôi tạo một dự án MVC mới, nó đã thêm httpModule, Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule trong Web.config của tôi. Điều này là do tôi đã bỏ chọn tùy chọn "Thêm ứng dụng chuyên sâu vào dự án" khi tạo dự án ứng dụng ASP.NET Web Aapplication mới. Khi tôi xóa httpModule khỏi Web.config, trang web đã hoạt động mà không gặp lỗi. Thiết lập validateIntegratedModeConfiguration thành false hoạt động, nhưng đó chỉ là một cách tiếp cận có dải băng.
iCode

2
Một cài đặt ASP.NET đã được phát hiện không áp dụng trong chế độ đường ống được quản lý tích hợp. Đây là một thông báo lỗi vô dụng khác của Microsoft. ASP.net có hàng ngàn cài đặt nhưng Microsoft không nghĩ sẽ bao gồm lỗi gây ra lỗi trong văn bản lỗi. MS đang được điều hành bởi các nhà tiếp thị hơn là các kỹ sư, vì vậy đừng mong đợi mọi thứ sẽ sớm được cải thiện. :-(
Paul McCarthy

35

Nếu bạn vẫn cần sử dụng Mô-đun HTTP, bạn cần định cấu hình nó (khung .NET 4.0) như sau:

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

2
Tôi nghĩ rằng thuộc tính httpModules trong system.web là dành cho phiên bản ASP 3.5 trở lên. Đối với ASP 4 trở lên, hãy sử dụng các mô-đun trong system.webserver
Trio Cheung

1
@HoyCheung thực sự là vấn đề sử dụng đường ống Tích hợp hoặc Cổ điển, không phải phiên bản nào của .Net, quyết định nên sử dụng system.web / httpModules hoặc system.webServer / mô-đun.
Pauli Østerø

29

Tôi gặp vấn đề này nhưng đã có một cách khắc phục khác. Nó liên quan đến việc cập nhật Control Panel>Administrative Tools>IIS Managervà hoàn nguyên Đường ống được quản lý của trang web Ứng dụng của tôi từ Integratedđến Classic.


3
Đồng ý - đây là lựa chọn tốt hơn thay vì chỉ che giấu lỗi! Đảm bảo bạn đang sử dụng Nhóm ứng dụng chính xác - phải là Cổ điển không được tích hợp
Swomble

1
Tôi đang sử dụng visual studio 2012, làm thế nào tôi có thể thay đổi nhóm ứng dụng thành cổ điển.

10
Đây không phải là một giải pháp tốt nếu bạn muốn sử dụng tất cả các tính năng mới có sẵn trong Đường ống tích hợp. Điều này giống như nói trở lại .NET 2.0 từ 4.0 vì một vấn đề.
Trevor de Koekkoek

Để thực hiện việc này trong Trình quản lý IIS, hãy chuyển đến Application Poolscây bên trái, nhấp đúp vào nhóm bạn muốn thay đổi và chọn chế độ đường ống.
Steve Smith

8

Kiểm tra nếu có bất kỳ xung đột trong xác thực IIS của bạn. tức là bạn kích hoạt xác thực ẩn danh và mạo danh ASP.NET cả hai cũng có thể gây ra lỗi.


5

Trong web.config, hãy đảm bảo các khóa này tồn tại:

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

Cũng như kiểm tra Impresonation Asp.Net = Vô hiệu hóa trong Xác thực trang web IIS


3

Tôi gặp phải vấn đề này và được truyền cảm hứng từ câu trả lời của @Jeremy Cook, tôi cắn viên đạn để tìm hiểu xem cái quái gì đã khiến chế độ Tích hợp IIS 7 không thích web.config của tôi. Đây là kịch bản của tôi:

  1. API web (phiên bản 4.0.030506.0 hay còn gọi là phiên bản cũ)
  2. .NET 4.0
  3. Định tuyến thuộc tính 3.5.6 cho API Web [cảnh báo spoiler: chính là anh chàng này!]

Tôi muốn sử dụng định tuyến thuộc tính trong một dự án (không may) phải sử dụng .NET 4 và do đó không thể sử dụng Web API 2.2 (cần .NET 4.5). Gói NuGet cũng có nghĩa là thêm phần này trong <system.web>phần:

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

[Tôi nói ý nghĩa tốt, bởi vì phần này là bắt buộc trên các phiên bản cũ hơn của IIS]

Xóa phần này đã giúp tôi vượt qua HTTP 500,23 !!

Tóm tắt: Tôi thứ hai lời của Jeremy rằng điều quan trọng là phải hiểu tại sao mọi thứ không hoạt động thay vì chỉ "che giấu triệu chứng". Ngay cả khi bạn phải che dấu triệu chứng, bạn vẫn biết bạn đang làm gì (và tại sao) :-)


Cảm ơn. Tôi đã thêm AttributionRouting, bao gồm gói NuGet bổ trợ Trình điều khiển Api và xóa phần bạn đã chỉ ra khỏi web.config đã giải quyết vấn đề. Tuy nhiên, tôi hơi lo ngại vì ứng dụng web MVC của tôi đã sử dụng .NET framework 4.5.
Robert Oschler 16/07/2015

2
@RobertOschler nếu bạn đang dùng .NET 4.5, bạn đã có định tuyến thuộc tính được tích hợp trong AFAIK - bạn không cần NuGet này?
Sudhanshu Mishra

Cảm ơn và tào lao. Đã có vài giờ hôm nay nhận được gói AttributionRouting chạy NuGet. Tôi đã rút nó ra và hủy bỏ tất cả các mã "sửa lỗi" mà tôi đã thêm để làm cho nó hoạt động và thay thế thuộc tính Web API 2 Route () cho thuộc tính GET (). Làm việc tuyệt vời. Chúng tôi thực sự cần một hệ thống chuyên gia ngày nay chỉ để giúp chúng tôi với tất cả các gói này.
Robert Oschler 16/07/2015

2

Điều này làm việc cho tôi:

  1. Xóa trang web được tạo ban đầu.
  2. Tạo lại trang web trong IIS
  3. Dung dịch sạch
  4. Xây dựng giải pháp

Có vẻ như một cái gì đó đã đi về phía nam khi tôi ban đầu tạo ra trang web. Tôi ghét các giải pháp tương tự như "Khởi động lại máy của bạn, sau đó cài đặt lại windows" mà không biết nguyên nhân gây ra lỗi. Nhưng, điều này làm việc cho tôi. Nhanh chóng và đơn giản. Hy vọng nó sẽ giúp người khác.


0

Trong trường hợp của tôi, tôi đã thiếu dll trong thư mục bin được tham chiếu trong tệp web.config. Vì vậy, hãy kiểm tra xem bạn có đang sử dụng bất kỳ cài đặt nào trong web.config không nhưng thực sự không có dll.

Cảm ơn


0

Tôi đã mất vài giờ để giải quyết vấn đề này bởi vì tất cả các cài đặt mà tôi tìm thấy ở đây về lỗi này đều giống nhau nhưng nó vẫn không hoạt động. Vấn đề là tôi đã có một thư mục trong dịch vụ web của mình, từ đó tệp sẽ được gửi đến thiết bị WinCE, sau khi chuyển đổi thư mục đó sang một ứng dụng với Classic.NetAppPool, nó bắt đầu hoạt động.


0

Bước dưới đây đã giải quyết vấn đề của tôi:

Mở CMDNhắc với Đặc quyền của Quản trị viên.

Chạy : iisreset.

Hi vọng điêu nay co ich.


-1

Phương pháp cho cục bộ Là lỗi

hình ảnh


7
Đừng thay đổi cài đặt này trừ khi bạn thực sự biết bạn đang làm gì. Điều này gần như không bao giờ là câu trả lời chính xác.
NickG
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.