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.
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
:
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
:
Hinweis: Ich bin mit Typoskript nicht vertraut, daher könnte es einen besseren Weg geben, es zu implementieren.
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.
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.
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:
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%Tags und Links asp.net-web-api javascript c# asp.net iis