2014-04-15 10 views
6

Ich bin schwer zu sehen, warum Nancy Anfragen für etwa 1 Minute nicht akzeptiert. Ich habe ungefähr 60 Endpunkte und alle diese initialisieren sehr schnell, so dass alle Module verarbeitet werden.Nancy langsam zu akzeptieren Anfragen

Gibt es gemeinsame Gründe dafür? Oder gibt es eine Möglichkeit, herauszufinden, was vor sich geht?

EDIT

Protokollierung des App startet

App Start 4/15/2014 11:03:48 AM 
App Start Complete 4/15/2014 11:03:48 AM 
Bootstrap 4/15/2014 11:04:19 AM 
Module 3 4/15/2014 11:06:37 AM 
Module 1 4/15/2014 11:06:37 AM 
Module 2 4/15/2014 11:06:37 AM 
Module 1 4/15/2014 11:06:37 AM 
Module 1 4/15/2014 11:06:37 AM 
Module 1 4/15/2014 11:06:37 AM 
Module 1 4/15/2014 11:06:37 AM 
Module 1 4/15/2014 11:06:37 AM 
Module 1 4/15/2014 11:06:38 AM 
Module 1 4/15/2014 11:06:38 AM 
Module 1 4/15/2014 11:06:38 AM 

Wie in den Zeiten, zu sehen gibt es eine Verzögerung, bevor Bootstrap und auch vor Module aufgerufen werden.

EDIT 2

Meine Konfiguration ist Nancy (v0.22.2 von der Quelle als starker Schlüssel gebaut wurde ohne Änderungen am Code erforderlich) ASP.NET 4.5 Web Forms verwenden. Verwenden von Visual Studio 2013 als IDE

+0

Ich bin mir nicht sicher, ob ich Ihr Setup verstehe - 60 Endpunkte und alle Module sind initialisiert, aber der Bootstrapper wird danach aufgerufen? Was? :) –

+0

@StevenRobbins Ich war falsch haben hinzugefügt Protokollierung zu meinem Startup wird meine Antwort mit den Details aktualisieren – Dreamwalker

+0

hinzugefügt meine Konfiguration nur für den Fall, dass es relevant ist – Dreamwalker

Antwort

9

Ich denke, ich fand, was das Problem war. Das Problem tritt mit der AutoRegister-Funktion aus dem TinyIoC-Container auf, den Nancy verwendet.

Grundsätzlich beim Start (erste Anfrage) scannt es jede Assembly Ihrer AppDomain, um Abhängigkeiten zu registrieren. Dieser Prozess ist sehr langsam: https://github.com/NancyFx/Nancy/issues/643

Die Lösung Ihre Abhängigkeiten manuell registrieren, wie hier angegeben: https://github.com/NancyFx/Nancy/wiki/Bootstrapping-nancy

Grundsätzlich müssen Sie nur eine Klasse in Ihrem ASPnet Projekt erstellen, die von DefaultNancyAspNetBootstrapper erbt und die ConfigureApplicationContainer Methode überschreiben:

public class Bootstrapper : DefaultNancyAspNetBootstrapper 
{ 
    protected override void ConfigureApplicationContainer(TinyIoCContainer container) 
    { 
     // Register our app dependency as a normal singleton   

    } 
} 

hoffe, das hilft,

+0

Hallo Danke für die Rückmeldung Ich werde dies versuchen – Dreamwalker

+1

Dies war in der Tat der Grund, warum ich viele große abhängige Baugruppen habe. Der Super Duper Happy Path war nicht so glücklich es scheint;) – Dreamwalker

+0

Nancy ist genial. –

0

Die Ursache der langsamen Durchführung von Autoregister-Funktion in Nancy ist riesig Anzahl der bearbeiteten Baugruppen und Typen. Das zweite Problem ist kein optimaler Code für einen solchen Fall. Die aktuelle stabile Version von Nancy (1.4.3) hat folgenden Code https://github.com/NancyFx/Nancy/blob/1.x-WorkingBranch/src/Nancy/TinyIoc/TinyIoC.cs#L3092-L3094 Als Ergebnis dieser linq Ausdruck für jeden Typ verarbeitet ... Um dieses Verhalten zu ändern, können Sie die folgende Klasse als Basis für Ihren Bootstrapper verwenden. Sie können diesen Code auch beschleunigen, indem Sie Ihre 3D-Gruppen in AutoRegisterIgnoredAssemblies ausschließen (siehe Beispiel im Code).

In meinem System hilft es, die Geschwindigkeit der automatischen Registrierung um 521 mal von 50 Sekunden auf 95 ms zu erhöhen.