Entwickler-Ecke

Verteilte Systeme - WebService async await in WinRT


Trombone - Sa 27.10.12 00:32
Titel: WebService async await in WinRT
Hallo zusammen,
ich würde gernde das neue async await feature der Windows 8 WinRT nutzen, habe jedoch noch Schwierigkeiten:

Folgendes Szenario, ich möchte einen WCF WebService mit netTcpBinding consumieren, binde also die Service Referenz üer den Mex Endpoint ein und die entsprechenden Klassen werden zu meinem Projekt hinzugefügt.

Den Webservice kann ich auf die folgende Weise aufrufen:


C#-Quelltext
1:
2:
3:
4:
5:
void SomeMethod()
{
   ServiceClient client = new ServiceClient();
   bool result = client.MyWebServiceMethod("parameter");
}


Nach dem folgenden Tutorial hab ich mir die asynchrone Verarbeitung so vorgestellt:
http://blogs.msdn.com/b/piyushjo/archive/2011/09/22/wcf-in-win8-metro-styled-apps-absolutely-supported.aspx


C#-Quelltext
1:
2:
3:
4:
5:
async void SomeMethod()
{
   ServiceClient client = new ServiceClient();
   Task<bool> result = await client.MyWebServiceMethod("parameter");
}


Ich bekomme jedoch beim await Keyword folgende Fehlermeldung: Cannot implicitly convert type 'bool' to type 'system.threading.tasks.task<bool>'

In der Service Referenz ist die Methode Task<bool>

C#-Quelltext
1:
2:
3:
4:
public system.threading.tasks.task<bool> MyWebServiceMethod(parameter)
{
return base.Channel.MyWebServiceMethod(parameter);
}



Hab noch nie wirklich mit Threads gearbeitet, hab ich irgendwas grundlegendes nicht verstanden?
Fru mich auf euern Rat!


Christian S. - Sa 27.10.12 11:24

Hallo!

Meines Wissens müssen Methoden, auf die man mit await wartet, als async deklariert sein. Das ist die Methode MyWebServiceMethod aber nicht!

Grüße,
Chirstian


Kha - So 28.10.12 15:13


C#-Quelltext
1:
bool result = await client.MyWebServiceMethod("parameter");                    

Das Unrwapping übernimmt await schon.


Trombone - Fr 02.11.12 00:58

Danke, beides wichtig, methoden als async deklariert den entpackten return wert erwartet, dann läufts!