2013-06-26 8 views
6

W Visual Studio 2012 dostępna jest poręczna opcja "Generuj operacje oparte na zadaniach", której można użyć do generowania wersji wywołań usługi WCF Task i Task<T>.Generowanie wywołań usług WCF po stronie klienta opartych na zadaniach .NET 4.0

Używam pakietu Microsoft.Bcl.Async NuGet, aby skorzystać z async/await w moim projekcie .NET 4.0. Wydaje się jednak, że nie mogę wygenerować operacji opartych na zadaniach przy użyciu Kreatora odwołań do usługi konfiguracji w VS 2012 (opcja jest wyłączona).

O ile wiem, działa to tylko wtedy, gdy projekt jest ukierunkowany na .NET 4.5. Czy ktoś wie o sposobie generowania operacji opartych na zadaniach z klientem .NET 4.0?

+0

Czy próbowałeś tymczasowo przejść do .Net 4.5, generując kod WCF, a następnie przełączając? – svick

+0

@svick Dobry pomysł, ale niestety nie działa po przełączeniu z powrotem na 4.0. "[ServiceReference] nie jest poprawne dla bieżącej wersji programu .NET Framework lub typu projektu" – Jeremy

Odpowiedz

2

Można użyć tego rozwiązania do tworzenia transmisji asynchronicznej zadanie oparte klienta wcf w .NET 4,0

  • Otwarte Nuget i dodać pakiet „Microsoft.Bcl.Async” do projektu .NET 4.0
  • Tworzenie nowe rozwiązanie z nowym projektem .Net 4.5 o tej samej nazwie, co projekt .Net 4.0.
  • Dodaj odwołanie do usługi (do żądanej usługi internetowej) o tej samej nazwie, która została utworzona w projekcie usługi .Net 4.0
  • Upewnij się, że opcja "Generuj operacje oparte na zadaniach" „Pozwól Generation operacji asynchronicznych” sprawdza się w zaawansowanych opcjach dialogowe
  • Otwórz folder odniesienia usługa .NET 4.5 projektu („NET_4.5_PROJECT_FOLDER \ serwisowe Referencje \ YOUR__SERVICE_REFERENCE_FOLDER \”)
  • Skopiuj wszystkie pliki z folderu
  • Otwórz folder odniesienia serwis projekcie .NET 4.0 („NET_4.0_PROJECT_FOLDER \ Serwis Referencje \ YOUR__SERVICE_REFERENCE_FOLDER \”)
  • Wklej plików (w folderze referencyjnym 4,0 serwisu Net), które zostały skopiowane wcześniej (od folder referencyjny usługi .Net 4.5)

Podsumowując, należy wygenerować odwołanie do usługi w .NET 4.5 i skopiować je do projektu .Net 4.0. Należy obowiązkowo dodać pakiet "Microsoft.Bcl.Async" do projektu .Net 4.0.

EDIT

I odkryli, że to rozwiązanie działa tylko wtedy, .Net Framework 4.5 jest zainstalowany na komputerze. Jeśli uruchomisz program na komputerze z zainstalowanym .Net Framework 4.0, to nie działa (Windows XP nie jest obsługiwany w .Net Framework 4.5, więc jest to dobre środowisko do testowania programu). Ten wyjątek jest generowany, gdy program .Net Framework 4.0 nie jest zainstalowany:

Typ 'System.Threading.Tasks.Task`1 [System.Boolean]' nie może być serializowany. Rozważ oznaczenie go atrybutem DataContractAttribute i oznaczenie wszystkich jego członków, które mają być serializowane za pomocą atrybutu DataMemberAttribute. Jeśli typ jest zbiorem, rozważ oznaczenie go atrybutem CollectionDataContractAttribute. Zobacz dokumentację Microsoft .NET Framework dla innych obsługiwanych typów.

Podsumowując, nie jest dobrym obejściem.