12

Ich baue gerade eine Xamarin-basierte mobile Anwendung. Für dieses Projekt habe ich ein PCL-Projekt mit Framework 4.5 erstellt. Ich verwende VS 2013 als Entwicklungs-IDE. Jetzt möchte ich eine WCF-Service-Referenz zu diesem PCL hinzufügen. Beim Hinzufügen der Service-Referenz zu diesem PCL-Projekt habe ich festgestellt, dass die Generierung von asynchronem Betrieb deaktiviert ist. Bitte überprüfen Sie das Bild für weitere Details.Taskbasierter asynchroner Betrieb in der PCL-Service-Referenzeinstellung deaktiviert

enter image description here

ich hinzugefügt, um das BCL.Async Paket über Nuget für das Projekt. Aber ich kann immer noch nicht auf die Task-basierte Operation aus der Radiobutton-Liste zugreifen (es ist deaktiviert).

Gibt es also eine Möglichkeit, aufgabenbasierte asynchrone Operation im Service-Client zu generieren?

+0

Ich habe genau das gleiche Problem. Ich habe irgendwo gelesen, dass das Deaktivieren der Ausrichtung auf wp8 in Projekteigenschaften diese Option möglicherweise aktiviert. Aber das hat nicht für mich funktioniert. – Michelh91

Antwort

1

Ich habe Xamarin noch nicht benutzt, aber ich nehme an, dass APM und vielleicht sogar Tasks darin unterstützt werden und dies ist nur eine Einschränkung von Visual Studio. Versuchen Sie, wsdl.exe manuell zu verwenden, um Code zu generieren. Dies ist das Tool, das Visual Studio aufruft, wenn Sie eine Servicereferenz hinzufügen.

Sie müssen entweder newAsync (Aufgaben) oder oldAsync (APM) über den /parameters Switch übergeben.

2

Hate, um es zu brechen, aber Sie können Task-basierten WCF-Client in Xamarin nicht generieren. Der Grund ist Xamarin oder Mono implementiert das Silverlight-Set, das eine begrenzte WCF-Implementierung ist. Daher müssen Sie stattdessen SLSVCUTIL.exe verwenden (das Hinzufügen eines Dienstverweises in Xamarin würde dieses Tool verwenden). Der silverlight WCF-Client, der von SLSVCUTIL generiert wird, ist nur asynchron.

Alles ist nicht verloren! Sie können den Silverlight-Asynchronclient problemlos in einen aufgabenbasierten Client mithilfe der Task.FromAsync-Methode einbinden.

Eine Probe von der Website Xamarin genommen:

public async Task<List<TodoItem>> RefreshDataAsync() 
{ 
    ... 
    var todoItems = await Task.Factory.FromAsync <ObservableCollection<TodoWCFService.TodoItem>> (
    todoService.BeginGetTodoItems, 
    todoService.EndGetTodoItems, 
    null, 
    TaskCreationOptions.None); 

    foreach (var item in todoItems) { 
    Items.Add (FromWCFServiceTodoItem (item)); 
    } 
    ... 
} 

https://developer.xamarin.com/guides/xamarin-forms/web-services/consuming/wcf/

Nun, wenn jemand herausfinden, wie eine Fehlerausnahme zu fangen, wenn sie in Aufgaben, die Verpackung wäre genial!