2009-06-09 6 views
0

In Silverlight habe ich das folgende Problem. Wenn Sie mehrere Anforderungen an den Webdienst senden, werden die Antworten möglicherweise nicht in einer geordneten Reihenfolge zurückgegeben. Das heißt, wenn die erste Anforderung dauert länger als die folgenden, ihre Antwort schließlich zurück:Löschen veralteter WCF-Antworten in Silverlight

1. Sending request A.. (takes longer for some reason) 
2. Sending request B.. 
3. Sending request C.. 
4. ... 
5. Receiving response B 
6. Receiving response C 
7. Receiving response A 

Jetzt in meinem Szenario, bin ich daran interessiert sind nur in den meisten kürzlich erfolgte Anfrage gemacht. Also sollten A und B discarded sein und C sollte als einzige akzeptierte Antwort gehalten werden.

Was ist der beste Ansatz, um dies zu verwalten? Ich habe diese Lösung bisher gefunden:

Übergeben Sie eine generierte GUID als Benutzerobjekt beim Senden der Anfrage und speichern Sie diesen Wert irgendwo. Da alle Antworten ihre jeweilige GUID enthalten, können Sie nun die veralteten Antworten herausfiltern. Ein Anforderungszähler anstelle einer GUID würde ebenfalls funktionieren.

Jetzt frage ich mich, ob es irgendwelche besseren Ansätze dazu gibt. Vielleicht gibt es irgendwelche Out-of-the-Box-Funktionen, um dies zu ermöglichen? Irgendwelche Ideen sind willkommen.

Antwort

2

Ich nehme einen ähnlichen Ansatz in meinem nicht-WCF ASP.NET-Webdienste, obwohl ich die DateTime der Anfrage stattdessen verwenden und dann nur die DateTime der letzten Anfrage speichern. Auf diese Weise kann ich einen direkten Vergleich durchführen, um festzustellen, ob der wiederkehrende Dienst der aktuellste ist oder nicht.

Ich habe in alten Serviceaufrufen zu löschen, bevor Sie neue, aber es gibt keine Aufruf für Web-Services in Silverlight und ich habe nicht in der Lage, einen entsprechenden Weg zu finden, dies zu tun.

0

Diese beiden Ansätze habe ich bei der Arbeit an einem Echtzeitsystem mit vielen Serviceanrufen gemacht. Im Grunde haben Sie nur einen Weg, um die Reihenfolge zu verfolgen (Variable, Zeitstempel usw. erhöhen), dann verfolgen Sie die höchste erhaltene Antwort. Wenn die aktuelle Antwort niedriger als die höchste ist, lassen Sie sie fallen.