2016-03-23 19 views
5

Tôi nhận thấy một hành vi lạ khi gỡ lỗi một ASP.NET Web Application (.NET 4.6.1). Bất cứ khi nào xảy ra lỗi HTTP (ví dụ: 404 hoặc 403), yêu cầu được nhân đôi tối đa 3 lần.Yêu cầu trùng lặp khi gỡ lỗi ASP.NET trên IIS Express

Tôi đã thử nghiệm vấn đề số ít này bằng cách sử dụng trình duyệt và Intellitrace có hiệu quả cho tôi thấy ba yêu cầu giống hệt nhau (ngay cả khi tôi chỉ gửi một yêu cầu).

Fiddler Intellitrace

tôi có thể thấy những ảnh hưởng của vấn đề này bởi vì bất kỳ middleware Owin trong các đường ống được gọi ba lần. Một phần mềm trung gian đơn giản như thế này:

app.Use(async (c, n) => 
{ 
    Debug.WriteLine("HIT!"); 
    await n.Invoke(); 
}); 

Sẽ in ba chữ "HIT!" Liên tiếp vào bảng điều khiển.

Điều này chỉ xảy ra nếu yêu cầu tạo ra lỗi và không phải nếu yêu cầu được xử lý bởi phần mềm trung gian (ví dụ: nếu phần mềm trung gian phản hồi với mã trạng thái 2XX).

Điều gì đang xảy ra?

Tôi đang chạy VS2015 và IIS Express 10 trên Win10.

[EDIT] Nó có thể liên quan đến cấu hình Web.config của tôi? Tôi đang thêm một đoạn trích từ nó.

<system.web> 
    <compilation debug="true" targetFramework="4.6.1" /> 
    <httpRuntime targetFramework="4.6.1" enableVersionHeader="false" /> 
</system.web> 
<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
      <clear /> 
     </customHeaders> 
     <redirectHeaders> 
      <clear /> 
     </redirectHeaders> 
    </httpProtocol> 
    <security> 
     <requestFiltering removeServerHeader="true" /> 
    </security> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <remove name="OPTIONSVerbHandler" /> 
     <remove name="TRACEVerbHandler" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
    <modules runAllManagedModulesForAllRequests="true" /> 
</system.webServer> 
+0

hiển thị mã cho chúng tôi phát sinh lỗi. Nó không phải là mã của bạn; nó chỉ cần tái sản xuất vấn đề. –

+0

Không có mã nào tạo ra lỗi. Trong ví dụ, tôi đã thực hiện một yêu cầu tới 'https: // localhost: 44300' và IIS trả về trực tiếp mã trạng thái 403. Cũng giống như vậy nếu tôi yêu cầu một điểm cuối không tồn tại (ví dụ 'localhost: 44300/somethingnonexisting'), và IIS trả về 404. –

+0

Cũng lưu ý rằng hiện tại không có gì khác trong đường ống Owin, chỉ là phần mềm trung gian cho thấy trong ví dụ. –

Trả lời

2

Vấn đề là do nhiều trình xử lý cố gắng quản lý yêu cầu chưa được giải quyết trong IIS Express. Tôi đã giải quyết nó bằng cách xóa chúng trong Web.config:

<system.webServer> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
     <remove name="ExtensionlessUrl-Integrated-4.0" /> 
     <remove name="ExtensionlessUrl-ISAPI-4.0_32bit" /> 
    </handlers> 
</system.webServer> 
Các vấn đề liên quan