2012-09-04 8 views
11

Ich mache Anrufe zu einem Web-API mit RESTSHARP und sie funktionieren gut. Der anfängliche Aufruf der API (unabhängig davon, wie sie aufgerufen wird) kann jedoch manchmal bis zu 10 Sekunden dauern, um eine Antwort zu erhalten. Jeder weitere Anruf danach ist sehr schnell. Kennt jemand einen Weg um dies?Warum ist mein erster Anruf in RestSharp wirklich langsam? aber andere nach sind sehr schnell

Ich bin ein WPF 4.0 Anwendung

Code ausgeführt wird:

var client = new RestClient(apiAddress); 
var request = new RestRequest(Method.GET); 

IRestResponse response = client.Execute(request); 
+0

Das ist normalerweise eine Firewall oder ein anderes Netzwerkproblem. Nicht dein Code. –

+0

Erster Anruf von einem neuen Client oder erster Anruf an einen neuen Server? –

+0

Vielleicht DNS-Problem. Versuchen Sie es nur mit IP. – BlueM

Antwort

13

Es ist höchstwahrscheinlich die Netzwerkeinstellungen dieses Problem verursacht. Ich hatte vor kurzem das gleiche Problem und es stellte sich heraus, dass bei der Verwendung von HttpWebRequest oder RestSharp versuchte einige automatische Konfiguration für einen Proxy-Server suchen.

Öffnen Sie die Netzwerkeinstellungen in Internet Explorer und deaktivieren Sie die automatische Konfiguration für das lokale Netzwerk. In meinem Fall hat dies die Verzögerung für die erste Anfrage in RestSharp behoben.

+1

Das hat das Problem Servy behoben. Ich habe dies als richtig markiert, aber es wird mir nichts nützen, da ich eine kommerzielle Anwendung entwickle, die auf mehreren Computern installiert werden soll und ich kann Benutzer nicht zwingen, diese Option zu deaktivieren. Danke aber für die Klärung. –

+0

@NeilHobson haben Sie eine Problemumgehung gefunden? – Sergey

+0

Sie können dies auch tun: http://stackoverflow.com/questions/2519655/httpwebrequest-is-extremely-slow – christo8989

0

Wenn Sie verwenden WinForms usw. in app.config nach connection:

<system.net> 
    <defaultProxy enabled="true"> 
    <proxy usesystemdefault="True"/> 
    </defaultProxy> 
</system.net> 
+0

Hallo, ich habe diese Code-Konfiguration verwendet und es funktioniert jetzt "nie arbeiten" –

+1

@Osamakhrog Hat es funktioniert oder nicht ? Was bedeutet "niemals arbeiten"? – hiFI

+0

Es funktionierte für mich, ich denke, die wichtigste Aussage ist "winforms", obwohl es in meinem Fall eine Konsolen-App war. Es ist wahrscheinlich nicht das gleiche für einen Webserver. – Jay13

2

Versuchte der automatischen Konfiguration, um loszuwerden, für einen Proxy-Server zu suchen mit diesem

System.Net.WebRequest.DefaultWebProxy = null; 
0

ich versucht hatte, @ skrause's Antwort, aber es war nicht für mich Arbeit. Ich verbringe viel Zeit, und schließlich habe ich es gelöst. Das ist meine Sulotion.

public class SimpleWebProxy : IWebProxy 
{ 
    public ICredentials Credentials { get; set; } 

    public Uri GetProxy(Uri destination) 
    { 
     return destination; 
    } 

    public bool IsBypassed(Uri host) 
    { 
     // if return true, service will be very slow. 
     return false; 
    } 

    private static SimpleWebProxy defaultProxy = new SimpleWebProxy(); 
    public static SimpleWebProxy Default 
    { 
     get 
     { 
      return defaultProxy; 
     } 
    } 
} 

var client = new RestClient(); 
client.Proxy = SimpleWebProxy.Default;