2017-06-16 2 views
0

Ich lese Daten von Remotedienst über HttpWebRequest. Empfangene JSON-Nachricht wird vorübergehend als List(Of Customer) gespeichert und anschließend mithilfe von Dapper in eine Tabelle in Azure SQL eingefügt. Die Anwendung wird als ASP.NET mit .NET Framework 4.6.2 ausgeführt, das im Azure App Service gehostet wird. Das sind also zwei Schritten:HttpWebRequest Zeitlimit einmal ausgeführt nach dem SQL-Einfügen (Dapper)

A. Daten über HTTP-Anforderung Erhalten und speichern als List(Of Customer)

B. Legen Sie List(Of Customer) in Customer-Tabelle in Azure SQL Dapper verwenden.

Das funktioniert gut, bis ich versuchen, einen anderen Satz von Daten in demselben Verfahren zu lesen und einzufügen:

C. Erhalten von Daten über HTTP-Anforderung und speichern als List(Of Payment)

D. Insert List(Of Payment) in Zahlungstabelle in Azure SQL mit Dapper.

Problem: Zweite HTTP-Anfrage (Schritt C) immer aus. Ich habe mehrere Tests gemacht. Hier sind meine Beobachtungen:

  1. Beide HTTP-Anfragen dauern normalerweise 2 bis 3 Sekunden, wenn sie unabhängig ausgeführt werden.
  2. Das Ändern der Reihenfolge der Schritte zu A, C, B, D funktioniert einwandfrei. Mehrere nachfolgende Anfragen A, C, A, C, ... funktionieren ebenfalls. Dies beweist, dass kein Remote-Server-Problem vorliegt.
  3. HTTP-Anfrage Timeout kommt nur auf, wenn SQL-Insert vorangestellt ist.
  4. Ich habe A + B in eine Funktion und C + D in eine andere und trennen sie durch zwei separate Tasten über die GUI. Timeout kommt auf.
  5. Wenn C + D nach A + B aber mit 1 - 2 Minuten Verzögerung ausgeführt wird, ist alles in Ordnung. Scheint, je weniger Daten in Schritt A + B eingefügt werden, desto kleiner ist die Verzögerung für C + D, um korrekt ausgeführt zu werden.
  6. Nach dem Ausführen von A + B Timeout immer alle anderen HTTP-Anfrage an den gleichen Server (wie A), auch wenn die angeforderte URL nicht existiert. Es spielt keine Rolle, ob die andere HTTP-Anfrage über dasselbe Browserfenster, andere oder sogar von einem anderen PC (andere asp.net-Sitzung)
  7. ausgelöst wurde, sobald eine andere HTTP-Anfrage im vorherigen Punkt abgebrochen wurde (Browserfenster, das sie ausgelöst hat wird geschlossen oder auf andere Seite umgeleitet), ohne auf das Timeout zu warten und ohne Verzögerung von 1 - 2 min, C + D wird gut funktionieren. Selbst wenige Sekunden später ausgelöst. Nur die erste Anfrage läuft ab.
  8. Ich habe versucht, ServicePoint.ConnectionLimit und System.Net.ServicePointManager.DefaultConnectionLimit zu erhöhen, aber sie wurden bereits auf Int32.MaxValue festgelegt.

Dies zeigt eine Verbindung zwischen SQL-Einfügungen und nachfolgende HTTP-Anforderung. Allerdings scheint dies schwer zu glauben, und ich würde irgend allgemeinere Frage, wie Speicherlecks Punkt usw.

EDIT:

Der Versuch, es weiter zu untersuchen. Unter Verwendung des ursprünglichen Szenarios A + B + C + D, nachdem die Anzahl der von der ersten HTTP-Anfrage zurückgegebenen Zeilen begrenzt war, begann es zu arbeiten. Der ursprüngliche Remote-Dienst hat 18.000 Zeilen zurückgegeben. Scheint wie 10.000 ist Nummer, wenn es beginnt zu arbeiten (einige Ausführungen laufen immer noch mit Fehler). Mit 9.000 Zeilen in Schritt A läuft der Code ohne Probleme. Natürlich benötigen SQL-Einfügungen in Schritt B weniger Zeit.

+0

Es scheint eine Sicherheitsberechtigung des Webdienstes zu sein, der die maximale Datengröße steuert. Wenden Sie sich an den Webadministrator, der diese Parameter in web.config ändern kann. –

+0

Kann nicht zustimmen, da sobald Dateneinfügungen übersprungen werden, Daten problemlos vom entfernten Server gelesen werden können. Siehe meine Beobachtung Nr. 2. – Megrez7

Antwort

0

Einstellung HttpWebRequest.KeepAlive = False für Web-Service-Anforderungen in den Schritten A und C löste das Problem.

Allerdings weiß immer noch nicht, warum es hilft und was der Grund für das zugrunde liegende Problem ist.

+0

Aber Sie haben einen Vorsprung. Ist es ein Fehler? Gibt es feine Nuancen, die du vermisst hast? –

+0

@clifton_h Absolut ja. Versuche im Moment mehr zu erfahren. Irgendwelche Vorschläge, wie man es debuggt? – Megrez7

Verwandte Themen