2016-08-15 3 views
0

QA-Team hat festgestellt, dass wenn der Webserver (die Embedded-Geräte-Benutzeroberfläche ausführt) auf einem System ausgeführt wird, auf dem der primäre DNS-Server nicht erreichbar ist, die Benutzeroberfläche unerträglich reagiert - 16 Sekunden für jede Aktion.Web-Anfragen werden sehr langsam, wenn der DNS-Server nicht erreichbar ist

Zuerst dachte ich, dass die Bereitstellung von statischen Seiten nicht von diesem Problem betroffen war.

Mit Ausnahme meines ersten Verdächtigen - Protokollierung - habe ich schließlich die Ursache zu Intelliggencia.UrlRewriter ausfindig gemacht (nuget Paket ver. 2.0.0.9). Es scheint, dass der Rewriter bei jeder Anforderung eine Kopie aller Servervariablen erstellt, einschließlich "REMOTE_HOST". Dies ist eine dynamische Variable und wird nur bei Bedarf ausgeführt. Dies beinhaltet wiederum einen Anruf an HttpRequest.UserHostName.

Die Frage ist einfach: Wie Reverse-Adressen-Lookups in Web-Anwendungen zu vermeiden, die den UrlRewriter verwenden?

Ich biete eine große Hammerantwort an, würde aber gerne andere Optionen hören.

Antwort

0

Ich habe eine andere Klasse Bibliothek-Projekt mit einem einfachen http-Modul hinzugefügt:

public sealed class NoRemoteHostLookup : IHttpModule 
{ 
    public void Dispose() 
    { 
    } 

    public void Init(HttpApplication context) 
    { 
     context.BeginRequest += ContextOnBeginRequest; 
    } 

    private void ContextOnBeginRequest(object sender, EventArgs eventArgs) 
    { 
     var request = HttpContext.Current?.Request; 

     if (request != null) 
      request.ServerVariables["REMOTE_HOST"] = request.ServerVariables["REMOTE_ADDR"]; 
    } 
} 

Diese dann durch die Web-App-Projekt verwiesen wird und in web.config vor die UrlRewriter konfiguriert:

<system.web> 
    <httpModules> 
     <add type="NoRemoteHostLookupModule.NoRemoteHostLookup, NoRemoteHostLookupModule" name="NoRemoteHostLookup" /> 
     <add type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" name="UrlRewriter" /> 
    </httpModules> 
</system.web> 
  • Sobald die Variable "REMOTE_HOST" festgelegt ist, wird das Framework später nicht mehr aufgelöst, wenn auf UrlRewriter zugegriffen wird.
  • Nun, das ist eine Theorie. Es funktioniert in meiner Visual Studio-Debugging-Sitzung, aber nicht in unserem Mono-Zielframework, wo ich eine System.NotSupportedException erhalte.
  • Ich habe einen Bug-Report https://github.com/sethyates/urlrewriter/issues/9
  • ich die Rewrite-Regeln auf die nginx Konfiguration übertragen Zwischenzeit und abgestreift UrlRewriter in der Produktion.