Warum wird ein Webdienst von einer Webseite aus langsamer aufgerufen?

Wir haben eine DLL, die als die mittlere Schicht zwischen unserem Website-Frontend und unserem Back-End-Ticketing-System verwendet wird. Die Methode der Einfügung in das Ticketing-System ist ein wenig kompliziert zu erklären, aber die kurze Version ist, dass es langsam ist. Das beste Fall-Szenario, das ich bekommen habe, ist eine 9 Sekunden lange Einreichungszeit.

Das eigentliche Problem ist jedoch, dass ich diese Zeit nur über eine Windows-App und nicht über eine ASP.NET-Website abrufen kann. Ich habe sowohl eine Windows-Testanwendung als auch eine Webseite zum Testen eingerichtet, und obwohl der Code zwischen ihnen kopiert wird, reicht die Webseite in 17-20 Sekunden aus, während die Windows-App 8-11 Sekunden dauert.

Was könnte das verursachen?

EDIT: Als Antwort auf ein paar Antworten ...

Der Anruf beim Web-Service nimmt den Großteil der Zeit in Anspruch, aber ich habe keine Kontrolle über diesen Web-Service, da er vom Ticketing-System-Anbieter bereitgestellt wird. Ich muss herausfinden, warum der Web-Service eine andere Zeit benötigt, wenn er von einer anderen Art von Anwendung aufgerufen wird. Der Code ist in beiden Fällen genau derselbe, und es wird eine Schleife ausgeführt, die die aufgezeichneten Zeiten meldet.

Der Code ist:

for (int i = 0; i < numIterations; i++)
        {
            startTimes[i] = DateTime.Now;

            try
            {
                cvNum = Clearview.Submit(req, DateTime.Now, DateTime.Now, false);
            }
            catch (Exception ex)
            {
                exceptionCount++;
                lblResult.Text += @"
Exception Caught: " + ex.Message + @"
"; } endTimes[i] = DateTime.Now; }

Es ist die gleiche Schleife in beiden Fällen, und ich markiere die Zeit direkt vor und nach dem Aufruf der Bibliothek, die weitere Verarbeitung durchführt und dann den Web-Service aufruft. Aber diese Verarbeitung sollte konsistent sein, oder? Ich habe während des Debuggens verfolgt und keine Verzögerung beim Aufruf des eigentlichen Webdienstes gesehen ...

EDIT Again: Mit Ants arbeiten, in beiden Fällen werden 99,4% der Zeit nur über den Web-Service-Aufruf gesendet. Dort scheint es keinen Unterschied zu geben ... außer dass die Web-Seite länger dauert als die Windows-App.

1
Nicht sicher was du meinst...?
hinzugefügt der Autor CodeRedick, Quelle
Testen zwischen zwei verschiedenen Web-Service-Backends: generierte Reference.CS in einem Fall und WebClient in einem anderen. Die Referenz wird in einer .DLL generiert, die sowohl von der Windows-App als auch von der Webseite verwendet wird.
hinzugefügt der Autor CodeRedick, Quelle
Welche Windows- und Web-Clients verwenden Sie für die Webdienste?
hinzugefügt der Autor Mark Cidade, Quelle
Verwenden Sie HttpWebRequest, eine generierte Reference.cs, einen clientseitigen JavaScript-Webclient oder was?
hinzugefügt der Autor Mark Cidade, Quelle

3 Antworten

Möglicherweise könnte der Standort des Webdienstes in Bezug auf den Webserver ein Problem haben. Darüber hinaus können die Seitenstruktur und andere Verarbeitungsschritte in Ihrer Webbenutzeroberfläche Auswirkungen darauf haben, wie lange die Verarbeitung der Anwendung dauert.

Wie bereits erwähnt, ist das Protokollieren von Objekten auf beiden Seiten eine großartige Idee. Wenn Sie das nicht erhalten, können Sie einen Leistungsprofiler wie den Ants Profiler von Red Gate verwenden, der Ihnen helfen kann, die verwendete Linie, Methode oder Klasse zu identifizieren der Großteil der Zeit.

2
hinzugefügt
Ich würde mir in diesem Fall den Ants Profiler ansehen, schau dir die Loop-Ausführungszeiten an. Werden Ausnahmen in einem Fall häufiger als in einem anderen ausgelöst? Ausnahmen sind kostspielig.
hinzugefügt der Autor Mitchel Sellers, Quelle
Ok, sehen Sie, ob Ameisen zwischen den beiden Apps eine bestimmte Linie isolieren können, die mehr Aufwand erfordert.
hinzugefügt der Autor Mitchel Sellers, Quelle
Ich habe gerade noch ein paar Infos hinzugefügt. Ich habe keinen Zugriff auf die Interna des Webservices, aber ich bin mir nicht sicher, warum das sowieso wichtig wäre ...
hinzugefügt der Autor CodeRedick, Quelle
Auch da ich auf meinem Desktop teste, ist der Webservice für beide Clients am selben Ort ...
hinzugefügt der Autor CodeRedick, Quelle
Jetzt mit Ameisen spielen, aber keine Ausnahmen werden geworfen.
hinzugefügt der Autor CodeRedick, Quelle
Es ist der Anruf beim Webservice, wie ich vermutet habe. 99% der Zeit ist nur auf diesen einen Anruf ...
hinzugefügt der Autor CodeRedick, Quelle

Schärfen Sie Ihre Anwendung auf beiden Seiten mit Protokollen - das zeigt Ihnen, wo die Zeit ist. Wenn das nicht hilft, verwenden Sie Wireshark , um die Netzwerkaktivitäten zu verfolgen.

1
hinzugefügt

Laufen Sie beide auf demselben Rechner? Befindet sich die von Ihnen aufgerufene mittlere Schicht auf einem Remote-Computer? Die Zeiten, die Sie vage erwähnt haben, fühlen sich wie ein DNS-Timeout-Problem an, wenn beim Öffnen einer Verbindung die Strafe für die erste DNS-Antwort (down/misaddressed) auf Timeout gesetzt wird. Sind Sie sicher, dass die Konfigurationsdatei/var, die die DLL auf die mittlere Ebene verweist, in beiden Aufrufen gleich ist?

Ich stimme dem Vorschlag zu, Wireshark zu benutzen, um zu sehen, was vor sich geht. Sie können sich zumindest davon überzeugen, dass die Backend-Bearbeitungszeit (sollte sowieso sein) gleich ist ...

1
hinzugefügt
Es war ein Config-Problem, das man in das Produktionssystem einreichte, obwohl beide den richtigen Web-Service verwendeten. Der Zeitunterschied war darauf zurückzuführen, dass die Produktdatenbank anscheinend viel geschäftiger ist. Ehrlich gesagt, nicht sicher, warum es überhaupt funktioniert hat ... Danke!
hinzugefügt der Autor CodeRedick, Quelle