2013-06-26 10 views
6

In Visual Studio 2012 è disponibile un'opzione "Genera operazioni basate sulle attività" che è possibile utilizzare per generare le versioni Task e Task<T> delle chiamate di servizio WCF.Genera chiamate di servizio WCF lato client basate su attività .NET 4.0

Sto usando il pacchetto Microsoft.Bcl.Async NuGet per sfruttare async/await nel mio progetto .NET 4.0. Tuttavia, non riesco a generare le operazioni basate sulle attività utilizzando la procedura guidata di riferimento del servizio di configurazione in VS 2012 (l'opzione è disabilitata).

Per quanto ne so, funziona solo se il progetto ha come destinazione .NET 4.5. Qualcuno sa di un modo per generare le operazioni basate su attività con un client .NET 4.0?

+0

Avete provato a passare temporaneamente a .Net 4.5, generando il codice WCF e quindi tornando indietro? – svick

+0

@svick Buona idea, ma purtroppo non funziona dopo il passaggio alla 4.0. "[ServiceReference] non è valido per la versione corrente di .NET Framework o il tipo di progetto" – Jeremy

risposta

2

È possibile utilizzare questa soluzione per creare asincrona basata su attività client WCF in .Net 4,0

  • Aprire NuGet e aggiungere il pacchetto "Microsoft.Bcl.Async" per il progetto .Net 4.0
  • Crea una nuova soluzione con un nuovo progetto .Net 4.5 con lo stesso nome del progetto .Net 4.0
  • Aggiungere un riferimento al servizio (al servizio Web desiderato) con lo stesso nome del riferimento del servizio creato nel progetto .Net 4.0
  • Assicurarsi che l'opzione "Genera operazioni basate su operazioni" sotto "Consentire la generazione di operazioni asincrone" è selezionata nelle opzioni avanzate di dialogo
  • aprire la cartella riferimento al servizio del progetto 4.5 Net ("NET_4.5_PROJECT_FOLDER \ servizi \ Riferimenti YOUR__SERVICE_REFERENCE_FOLDER \")
  • copiare tutti i file dalla cartella
  • Aprire la cartella riferimento al servizio del progetto .Net 4.0 ("NET_4.0_PROJECT_FOLDER \ servizio Referenze \ YOUR__SERVICE_REFERENCE_FOLDER \")
  • incollare i file (nella cartella riferimento al servizio 4,0 NET) che avete copiato prima (da la cartella di riferimento del servizio .Net 4.5)

In conclusione, è necessario generare il riferimento del servizio in .Net 4.5 e copiarlo nel progetto .Net 4.0. È obbligatorio aggiungere il pacchetto "Microsoft.Bcl.Async" al progetto .Net 4.0.

EDIT

ho scoperto che questa soluzione funziona solo se Net Framework 4.5 è installato sul computer. Se si esegue il programma su un computer con .Net Framework 4.0 installato, non funziona (Windows XP non è supportato in .Net Framework 4.5, quindi è un buon ambiente per testare il programma). Questa eccezione viene generata quando .Net Framework 4.0 non è installato:

Il tipo 'System.Threading.Tasks.Task`1 [System.Boolean]' non può essere serializzato. Considera di contrassegnarlo con l'attributo DataContractAttribute e contrassegnare tutti i membri che desideri serializzati con l'attributo DataMemberAttribute. Se il tipo è una raccolta, prendere in considerazione la possibilità di contrassegnarla con CollectionDataContractAttribute. Consultare la documentazione di Microsoft .NET Framework per altri tipi supportati.

Riassumendo, non è una buona soluzione alternativa.

Problemi correlati