Ich rufe einen .net Webservice von meiner .net winforms App, beide in Framework 4.0. Während der Ausführung des Programms, wenn der Webservice das erste Mal eine Methode aufgerufen hat, dauert der Aufruf ~ 10-12 Sekunden. Nachfolgende Anrufe dauern ~ 1-2 Sekunden. Nachfolgende Aufrufe, auch wenn die Web-Referenzinstanz neu erstellt wird, sind immer noch ~ 1-2 Sekunden. Wenn die Winforms-App neu gestartet wird, tritt die erste Anrufverzögerung erneut auf, nachfolgende Anrufe reagieren jedoch.
Die Instanz der Webreferenz wird vor dem Aufruf erstellt und ist nicht Teil der Verzögerung.
XmlSerializers für die Winforms-App werden generiert (und soweit ich weiß, aber ich weiß nicht, wie ich das verifizieren soll).
Die Verzögerung tritt nicht aufgrund einer Erst-Compilierung auf der Webservice-Seite auf. Dies ist ein Produktions-Webservice, der den ganzen Tag verwendet wird und dessen Apppool im Speicher verbleibt. Soweit ich sehen kann, tritt die Verzögerung entweder auf der Client-Seite oder zwischen dem Client und dem Server für diesen ersten Anruf auf, nicht jedoch bei nachfolgenden Anrufen.
Ich bin mir nicht sicher, was ich als nächstes prüfen soll. Irgendwelche Ideen?
Wie spender angegeben hatte, hatte das Problem mit der Proxy-Erkennung zu tun. Das Ausschalten im Internet Explorer löste das Problem, war aber in meiner Situation nicht machbar.
Stattdessen gibt es eine Problemumgehung, um die Verwendung des Standardproxys und damit die automatische Erkennung zu umgehen.
Durch Hinzufügen dieser Einträge zur app.config können bestimmte URLs den Proxy umgehen:
%Vor%Weitere Informationen finden Sie hier: & lt; defaultProxy Element & gt; auf MSDN
Versuchen Sie, den Proxy auf einen leeren WebProxy zu setzen, zB:
%Vor%oder Sie können die Proxyeinstellungen in der Datei .Config für Ihre Anwendung mit dem Schlüssel defaultProxy im Abschnitt system.net überschreiben. Folgendes deaktiviert die automatische Proxy-Erkennung:
%Vor%Ich habe dieses Problem viele Male erlitten - Mann, ich hasse es !!! lol Während ich es nie endgültig gelöst habe, könntest du ein paar Dinge ausprobieren. Rufen Sie zuerst während des Startvorgangs den Web-Service an und lassen Sie sich zuerst den "Schmerz" aus dem Weg räumen! Zweitens, versuchen Sie es mit dem IIS-Anwendungspool des Web-Service zu vermasseln - machen Sie es so, dass es sich niemals selbst recycelt oder es zumindest zu einer un-göttlichen Stunde am Morgen oder vielleicht pro 10000 Anfragen tut.
Ich weiß, das ist wahrscheinlich keine so gute Antwort, aber hoffe, es hilft ein wenig!
BEARBEITEN:
Teil des Problems ist, dass der Web-Service nicht "immer" läuft - er geht schlafen, recycelt usw., bis er gebraucht wird. Es lohnt sich, darüber nachzudenken, Web-Dienste am Leben zu erhalten, 5 9s up-Zeit usw.!
Ich habe diese Einstellungen in meinem basicHttpBinding hinzugefügt, wodurch die automatische Proxy-Erkennung deaktiviert und eine große Beschleunigung bei der ersten Ausführung erreicht wird. Dies funktioniert natürlich gut, wenn Sie sich in einer Intranetumgebung befinden oder Sie wissen, dass Sie überhaupt keinen Proxy benötigen.
bypassProxyOnLocal="false"
useDefaultWebProxy="false"
Hoffe, das hilft.
Tags und Links c# .net-4.0 asmx vb.net web-services