9 Stimmen

Jeder andere Aufruf von Async WCF ist langsam

Ich verwende Codebeispiele aus diesem Artikel von Rick Strahl: http://www.west-wind.com/weblog/posts/324917.aspx um asynchrone Aufrufe an einen WCF-Dienst zu tätigen, was hervorragend funktioniert.

Mein Problem ist folgendes: Der erste Aufruf des WCF-Dienstes dauert etwa 20 ms, während der nächste etwa 1 Sekunde und 20 ms dauert (wobei genau dasselbe geschieht und genau dieselben Daten empfangen werden). Wenn ich den Vorgang wiederhole, ist das Ergebnis immer dasselbe. Jeder zweite Aufruf dauert eine Sekunde länger als der erste.

Ich habe versucht, den InstanceContextMode für meinen Dienst einzustellen:

  [ServiceBehavior(IncludeExceptionDetailInFaults = true, InstanceContextMode = InstanceContextMode.PerSession)]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public abstract class AjaxPostBack : IAjaxPostBack

Ich habe auch Timer in den Methoden, die auf den Dienst aufgerufen werden, und das Ergebnis ist das gleiche jedes Mal (natürlich einige ms Unterschiede, aber nichts Wesentliches)

"JSON_Took":"00:00:00.0012939","Set_took":"00:00:00.0000274"

(Diese Werte - JSON_Took & Set_took - sind Zeitgeber in dem Code hinter den Methoden. Also nicht die Gesamtzeit von Client-Server-Client. Es ist einfach zu veranschaulichen, dass es nicht ein Problem mit dem eigentlichen Code ist zeitaufwendig)

Irgendwelche Ideen?

Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

---- Interessantes Update ----

Ich habe IE9 RC und auch Firefox heruntergeladen (ich habe in Chrome getestet) Meine Ergebnisse mit den verschiedenen Browsern:

Firefox : Alle Anrufe liegen einheitlich bei ca. 1s 20ms bis 1s 30ms

Chrom : Jeder zweite Aufruf erfolgt mit der Geschwindigkeit von Firefox, der Rest ist 1 Sekunde schneller

IE9 : Alle Anrufe sind praktisch in kürzester Zeit konsistent (~20ms)

Oper : Ziemlich dasselbe wie im IE9 (~30ms)

Ist dies ein Webkit-Problem? (Ich verwende $.ajax, um die WCF aufzurufen)

3voto

David Hoerster Punkte 27923

Ich würde mich nicht auf die Zeitangaben auf dem Devserver verlassen. Was passiert, wenn Sie Ihren Dienst auf IIS (oder sogar IIS Express) bereitstellen? Der VS2010 DevServer ist kein so zuverlässiger Server für Zeitmessungen und kein guter Indikator für die Produktionsleistung.

Hier ist ein guter Artikel (wenn auch etwas veraltet) über die Unterschiede zwischen IIS und dem Visual Studio Web Server (auch bekannt als Cassini).

Schön, dass das hilft!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X