2016-03-23 7 views
5

Ich bemerkte ein merkwürdiges Verhalten beim Debuggen einer ASP.NET-Webanwendung (.NET 4.6.1). Wenn ein HTTP-Fehler auftritt (z. B. 404 oder 403), wird die Anforderung bis zu insgesamt dreimal wiederholt.Doppelte Anforderungen beim Debuggen von ASP.NET unter IIS Express

Ich habe dieses singuläre Problem mit Fiddler getestet, und Intellitrace zeigt mir effektiv die drei identischen Anfragen (auch wenn ich nur eine einzige Anfrage sende).

Fiddler Intellitrace

kann ich die Auswirkungen dieses Problem, weil jede Owin Middleware in der Pipeline dreimal aufgerufen wird. Eine einfache Middleware wie folgt aus:

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

Wird in drei aufeinander folgenden drucken "HIT!" in die Konsole.

Dies geschieht nur, wenn die Anforderung einen Fehler generiert und nicht, wenn die Anforderung von einer Middleware verarbeitet wird (z. B. nicht, wenn die Middleware mit einem 2XX-Statuscode antwortet).

Was ist los?

Ich verwende VS2015 und IIS Express 10 auf Win10.

[EDIT] Kann es mit meiner Web.config Konfiguration zusammenhängen? Ich füge einen Auszug daraus hinzu.

<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

zeigen Sie uns Code, der einen Fehler generiert. Es muss nicht dein Code sein; es muss nur das Problem reproduzieren. –

+0

Es gibt keinen Code, der den Fehler erzeugt. Im Beispiel habe ich eine Anfrage an "https: // localhost: 44300" gestellt, und IIS gibt direkt einen 403 Statuscode zurück. Das gleiche gilt, wenn ich eine Anfrage an einen nicht vorhandenen Endpunkt (zB 'localhost: 44300/somadennoneexisting') mache und IIS eine 404 zurückgibt. –

+0

Beachten Sie auch, dass es im Moment nichts anderes in der Owin-Pipeline gibt, nur die Middleware im Beispiel gezeigt. –

Antwort

2

Das Problem wurde durch mehrere Handler verursacht versuchen, die nicht behandelte Anforderung in IIS Express zu verwalten. Ich löste es, indem ich sie in Web.config entfernte:

<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> 
Verwandte Themen