2012-03-26 9 views
4


Hallo
Eine Windows Phone-Anwendung muss eine Verbindung zu einem Server herstellen und Nachrichten davon erhalten. Dies geschieht über WCF und langes Polling auf dem Server. 3 Minuten ist das auf dem Server definierte Timeout. Anruf von Windows-Telefon erfolgt mit HttpWebRequest.
Das Problem besteht darin, dass Windows Phone-Geräte eine Zeitüberschreitung von 60 Sekunden für die Abrufanforderung haben (der Emulator hat einen anderen Wert als 3 Minuten).
Momentan kann ich Server Timeout nicht verringern. Eine neue GetRequest nach den 60 Sekunden führt nicht mehr zu Nachrichten.
Hat jemand eine Idee?
DankeLong polling Windows Phone, 60 Sekunden TimeOut

Antwort

3

Ich glaube nicht, eine Verbindung offen zu lassen ist eine gute Idee auf mobilen Geräten. Ich gehe davon aus, dass du das machst. In meiner App würde ich nur bei Bedarf abfragen, indem ich ein neues HttpWebRequest erstelle. Aber es machte Sinn, dies in meiner App zu tun, weil ich alle 40 Sekunden den Zugankunftsstatus aktualisieren würde.

Wenn Sie versuchen, Daten auf einem bestimmten Zeitplan zu ziehen, setzen Sie einen Timer in und rufen Sie den Webserver alle 3 Minuten oder was auch immer die Anforderung ist.

Wenn Sie wollen in der Lage sein, die Dinge zu überprüfen (wenn die App geschlossen ist) oder wenn es selten frische Daten auf dem Server ist, müssen Sie würden dann einen Push-Mechanismus implementieren.

Update: Hier ist ein guter Artikel mit dem Timeout-Ausgabe über den Umgang - http://blog.xyzzer.me/2011/03/10/real-time-client-server-communication-on-windows-phone-with-long-polling/

Update 2: Was ist, wenn Sie es so angeordnet, dass Sie Verbindungen haben Kaskadierung - was ich meine ist, da man‘ Wenn Sie mehr als 60 Sekunden pro Verbindung benötigen, können Sie eine Klasse schreiben, die zwei Verbindungen enthält. Sobald eine davon kurz vor dem Timeout steht, können Sie die andere Verbindung öffnen - Sie können das Timing auswählen höchstens 5 Sekunden Überlappung zwischen ihnen. Auf diese Weise können Sie Ihre immer offene Verbindung haben.

auch sehen, was diese Jungs mit der GChat App getan haben, haben sie ihren Quellcode zu diesem link verfügbar. Dies kann ein geeigneteres Design bereitstellen.

+1

ich schon diesen Artikel gesehen haben, und diese Probe ein Timeout von 50 Sekunden in diesem Fall benutzen ist es kein Problem. In meiner App kann ich nicht feststellen, wann Nachrichten auf dem Server verfügbar sind. Es ist wie eine Chat-App, also muss ich immer überprüfen, ob eine neue Nachricht gesendet wurde, also ist langes Polling besser als viele Get-Operationen. – Morti

+0

Ich denke, das ist Absicht. Eine mobile Verbindung sollte nicht für längere Zeiträume offen gelassen werden. Am besten wetten Sie auf Push. Siehe hier für weitere Informationen: http://msdn.microsoft.com/en-us/library/ff402537(v=vs.92).aspx –

+1

Kann nicht Push verwenden, wie ich sagte, es ist wie ein Chat-Messaging, und ich kann nicht mehr als 2 Sekunden Verzögerung haben. Um expressiver zu sein, ist es wie eine Siri-App, die sehr schnell reagieren muss, außerdem ist diese App nicht nur auf Windows-Phone, so dass die Implementierung eines Push-Benachrichtigungssystems dies zum dritten Mal benötigt und mehr Zeit benötigt, um Antworten zu erhalten. – Morti