È 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.
fonte
2016-04-14 14:48:46
Avete provato a passare temporaneamente a .Net 4.5, generando il codice WCF e quindi tornando indietro? – svick
@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