Das Senden einer GCM-Nachricht (serverseitig) schlägt oft fehl - aber bei weitem nicht immer

9

Ich verwende den Google Cloud Messaging (GCM) -Dienst für meine Android-App. Ich habe es nach allen Regeln implementiert, und es funktioniert. Naja, fast.

Meistens würde ich sagen, dass ich in 60-70% der Fälle erfolgreich eine GCM-Nachricht von meinem Server senden kann, indem ich den Webservice nutze, wie auf Google-Webseiten beschrieben.

Normalerweise erhalte ich die folgende Antwort vom Webservice, die anzeigt, dass ich die GCM-Nachricht erfolgreich gesendet habe:

%Vor%

Das sagt: alles OK, Nachricht gesendet.

In vielen Fällen bekomme ich jedoch beim Aufruf des Webservice einen HTTP-Fehler, der besagt:

  

Daten von der Transportverbindung können nicht gelesen werden: Ein eingerichtet   Verbindung wurde von der Software in Ihrem Host-Rechner abgebrochen.

Dies ist die .NET-Nachricht, die mir sagt, dass der Aufruf eines Webservice (mit HttpWebRequest und POST) fehlgeschlagen ist.

Dies sind einige Protokollmeldungen, die das Problem zeigen:

Dies ist der Code, den ich für den Aufruf des WS verwende:

%Vor%

Kann jemand sehen, ob ich etwas falsch mache oder wenn ich etwas generell vermisse?

    
Ted 12.03.2013, 09:32
quelle

1 Antwort

3
  

Daten von der Transportverbindung konnten nicht gelesen werden: Eine eingerichtete Verbindung wurde von der Software in Ihrem Host-Rechner abgebrochen.

Dieser Fehler hat insbesondere mit GCM API nichts zu tun. Dies bedeutet, dass Ihr Client versucht hat, den Webdienst zu kontaktieren, aber die hergestellte Verbindung in einer der Netzwerkebenen getrennt wurde. Je nachdem, wo Sie diesen Fehler und die Fehlermeldung erhalten, kann es mehrere Dinge bedeuten.

  1. Ihr Client hat entschieden, die Verbindung aufgrund eines Socket-Timeouts abzubrechen. Erhöhen Sie das Client-Lese- / Socket-Timeout, um die Situation zu verbessern.

  2. Ein Load Balancer, der sich zwischen dem Client und dem Server befindet, löschte die Verbindung. Jede Partei denkt, dass der andere die Verbindung abgebrochen hat.

Netzwerktimeouts sind normalerweise ein großer Schmerz, da nie klar ist, wo die Verbindung unterbrochen wurde und wer sie fallen gelassen hat. Wenn sich die Zeitüberschreitung nicht verbessert, würde ich vorschlagen, die Anforderungen über einen Proxy zu senden, der den HTTPS-Datenverkehr (charles / TCPMON) ausspähen oder mit Wireshark ermitteln kann, welche Pakete gelöscht werden.

Ihre Android-App verfügt außerdem über GCM-Überwachung, die Sie auf der Registerkarte Statistik aktivieren können. Überprüfen Sie, ob die GCM-API für dieses Diagramm eine andere Statusmeldung als 200 OK meldet. Das wird helfen, das Problem weiter einzugrenzen. Wenn es keine anderen Statuscodes als 200 gibt, bedeutet dies, dass GCM Ihre API-Anfragen nie anfing.

    
Deepak Bala 20.03.2013 19:11
quelle