Http POST-Anfragen erreichen den Server mehrmals

8

Ich entwickle eine Webanwendung. Clientseite - Javascript / Typescript + AngularJS Server Seite - c # - asp.net web api 2 IIS Express als Host.

Ich habe ein seltsames Problem bemerkt, bei dem POST-Requests den Server mehrmals erreichen. Beispiel: In einem Szenario, in dem Anforderungen mehrmals gesendet werden, wird jede Anforderung für eine bestimmte Ordner-E-Mail dreimal gesendet. Ich sehe auch diese Anfrage dreimal auf der Registerkarte Netzwerk gesendet.

%Vor%

Die Controller-Anpassungsmethode trifft zweimal oder sogar mehr, obwohl sie nur einmal vom Seitencode der Cliente aufgerufen wird.

Ist das etwas konfigurierbar? IIS seltsames Ding? Ich weiß wirklich nicht, wo ich anfangen soll.

    
S. Peter 22.08.2016, 22:02
quelle

4 Antworten

2

In mailsService legen Sie einen Intervallzeitgeber fest, um den Web-Service alle 3 Sekunden aufzurufen. Ist es möglich, dass zu dem Zeitpunkt, zu dem die Antwort zurückkommt und die gesamte Verarbeitung durchgeführt wurde, der Timer ein- oder zweimal angekreuzt wurde und die Prozedur erneut ausgelöst hat? Sie könnten dies testen, indem Sie das Intervall in kürzere und längere Werte ändern und sehen, ob dies die Anzahl der Aufrufe an den Server beeinflusst.

Eine Möglichkeit, das Risiko zu reduzieren, besteht darin, window.clearInterval ganz am Anfang Ihrer Erfolgsrückruffunktion vor dem Aufruf von getAllMails :

aufzurufen %Vor%

Eine andere Lösung wäre es, setInterval zu vermeiden. Sie könnten scope.webService.get ausführen und auf die Antwort warten. Im Fehlerfall würden Sie den Dienst nach einer Verzögerung mit setTimeout :

erneut aufrufen %Vor%

Hinweis: Ich bin mit Typoskript nicht vertraut, daher könnte es einen besseren Weg geben, es zu implementieren.

    
ConnorsFan 28.08.2016, 16:24
quelle
0

Ich habe auch keine Kommentarfunktion, aber was ich immer tue, ist eine neue Seite direkt nach dem Senden von Formularen zu laden. Wenn ein Benutzer die Zurück-Schaltfläche des Browsers drückt (sie tun dies oft), wird das Formular erneut gesendet . Wenn Sie stattdessen eine neue Seite laden, wird Ihr Formular nicht erneut geladen. Ich bin mir nicht sicher, ob das Problem immer auftritt, selbst beim Testen. In diesem Fall müssen Sie wahrscheinlich mehr Code posten.

    
Saskia 22.08.2016 22:12
quelle
0

Tritt dies in allen Browsern auf? Ich habe kürzlich ein Script-Tag mit einem leeren src-Attribut gesehen, das dazu geführt hat, dass Firefox die Seite scheinbar mehrmals geladen hat.

    
Learning2Code 01.09.2016 18:52
quelle
0

Ich sehe keinen Kandidaten für POST in Ihrem Web-API-Code, den Sie gepostet haben, noch einen POST-Aufruf in Ihrem Javascript. Fehle ich etwas?

Wie Sie bereits erwähnt haben Zum Beispiel ein Szenario, in dem Anfragen mehrmals gesendet werden, jede Anfrage für eine bestimmte Ordner-E-Mail dreimal gesendet wird , ich gehe davon aus, dass es die Methode getAllMails() ist mehrmals angerufen werden. Der Grund dafür ist die setInterval Logik in der folgenden Methode:

%Vor%

Es gibt eine potentielle Chance, dass dieser Aufruf mehrmals gemacht wird - man denke an ein Szenario, bei dem der allererste Aufruf (0. Sekunde) an scope.webService.get("url to get my own place") 6 Sekunden dauerte - das führt zu einem Ajax-Aufruf in der 3. und 6. Sekunde aufgrund der setInterval-Logik, da setInterval erst nach dem erfolgreichen Rückruf der Anfrage gelöscht wird.

Wenn die Logik hinter setInterval wie im Kommentar // Making this request until getting a successful response - waiting for server to go up erwähnt ist, würde ich Ihnen vorschlagen, einen anderen Ansatz zu wählen.

Ich bin mir nicht sicher, was Ihr Server sein würde, wenn er nicht "up" ist, aber unter der Annahme, dass er in diesem Szenario einen Fehlercode zurückgibt (zB Fehlercode -1), dann checken Sie Ihren Fehler zurück Wenn der Fehlercode etwas mit "Server ist nicht verfügbar" zu tun hat, rufen Sie dieselbe Methode erneut auf. Etwas wie:

%Vor%     
Developer 02.09.2016 07:57
quelle