Des öfteren kommt man in Situationen wo die Web-Service Kommunikation Synchron stattfinden muss. Als Beispiel wäre das die Methode, die den Web-Service aufruft, noch Informationen beinhaltet die mit dem Rückgabewerten vom Asynchronen Vorgang überprüft werden soll. Allerdings ist eine Synchrone Kommunikation mit Absicht nicht als Standard Aktiv. Das liegt daran, das die Silverlight Oberfläche sich sonst aufhängt solange der Server noch nicht antwortet. Das kann zum kompletten Absturz des Browsers führen und andere geöffnete Seiten mit beeinflussen.
Daher gibt es einen einfachen Vorgang um so ähnlich wie "synchron" zu kommunizieren, und das geht mit Silverlight & Lambda:
1
2
3
4
5
6
7
8
9
| public void GetCustomers()
{
Proxy.GetCustomersCompleted += (sender, eventArgs) =>
{
// Der Bereich wird aufgerufen wenn der Asynchrone Vorgang fertig ist...
};
Proxy.GetCustomersAsync();
} |
Die Asynchrone Anfrage wird in Zeile 8 gestellt. Wenn die Antwort vom Server folgt, wird der Bereich in Zeile 5 ausgeführt. Somit wäre die Kommunikation in einer Methode, als wäre es Synchron.
Sollte dennoch eine richtige Synchrone Kommunikation erwünscht sein oder alternativen in Betracht gezogen werden, möchte ich auf den Blog-Eintrag von Stefan Lange hinweisen: http://www.st-lange.net/post/Web-Services-in-Silverlight-synchron-aufrufen.aspx
Viel Spaß und viele Grüße,
BFreakout