Inserirò questa domanda anche se vedo che ce ne sono poche altre simili a questa. Tuttavia, non sono in grado di trovare una soluzione soddisfacente né sul perché ottengo questo errore né su come risolverlo.Errore: non supportato nel client di test WCF perché utilizza il tipo System.Threading.Tasks
Così, oggi ho dovuto ospitare un servizio sul mio computer locale a scopo di test. Il servizio è una soluzione di servizio WCF unica e funziona da molto tempo. Tuttavia quando ho scaricato il progetto e ho cercato di ospitare il servizio sulla mia macchina locale ho ottenuto l'errore dal titolo:
Questa operazione non è supportata nel client di prova WCF perché utilizza tipo System.Threading
Così quando sono tornato a casa ho deciso di creare un servizio utilizzando alcuni metodi asincroni e andare fino in fondo. Tuttavia sono rimasto davvero sorpreso quando ho ottenuto esattamente lo stesso errore su un progetto quasi vuoto che non sta usando (o almeno sembra così) lo System.Threading.Tasks
ovunque.
Quindi quello che ho fatto:
- Creato nuovo
WCF Service
utilizzando Visual Studio 2013 modello predefinito - sinistra il file di default
IService1.cs
eService1.svc
Cambiato il
IService1.cs
a:using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Web; using System.Text; namespace WcfService { [ServiceContract] public interface IService1 { [OperationContract] int GetEmpId(int id); } }
Modificato il
Service1.svc
in:utilizzando Sistema; utilizzando System.Collections.Generic; utilizzando System.Linq; utilizzando System.Runtime.Serialization; utilizzando System.ServiceModel; utilizzando System.ServiceModel.Web; usando System.Text;
namespace WcfService { public class Service1: IService1 {public int GetEmpId (int id) { ritorno id; }} }
E lasciando il default web.config
che assomiglia a questo:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the values below to false before deployment -->
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
non ho nemmeno cercato di utilizzare Task
, Threading
o qualcosa del genere, basta volevo vedere che il mio servizio è attivo e funzionante, così posso iniziare ad aggiungere cose e vedere esattamente quando riceverò l'errore ma per la mia sorpresa dopo aver impostato Service1.svc
come mio avvio classe e cercando di eseguire il progetto ho ottenuto lo stesso errore:
Questa operazione non è supportata nel client di verifica WCF perché utilizza il tipo Sistema.Threading
Ok, ora sono completamente perso. Stavo ricevendo questo errore dopo diversi tentativi di eseguire il mio progetto. Poco prima di postare questa domanda ho provato di nuovo e questa volta non ho ricevuto l'errore. In effetti ho appena finito il mio cliente e sono in grado di consumare il metodo GetEmpId()
.
Quindi cosa sta succedendo qui. Si tratta di screenshot quando costruire il mio progetto:
Non ho metodo GetEmpIdAsync()
. Non ho provato ad aggiungerlo. E come mai non si costruirà più volte e ora tutto ad un tratto sono in grado di utilizzare il metodo che ho effettivamente implementato fin dall'inizio?
Grazie per la spiegazione. Il servizio è stato realizzato anni fa e il fatto che ricevessi errori mi confondeva di più poiché so che questo servizio funzionava da molto tempo. Non ho intenzione di usarlo in modalità asincrona, al contrario mi chiedo davvero perché la MS avrebbe fatto una tale convenzione. Almeno per me, dal momento che sto usando 'WCF' raramente mi sembra davvero strano e confuso. Immagino che sia qualcosa che viene fornito con le versioni più recenti di 'Visual Studio' ... Comunque, grazie ancora. – Leron
Btw, c'è un modo per "dire" allo strumento di cercare solo i metodi di sincronizzazione, quindi non ottengo quei messaggi? – Leron
Questo strumento di test, io non la penso così. Tuttavia se stai usando [SvcUtil] (http://msdn.microsoft.com/en-us/library/aa347733 (v = vs.110) .aspx) per generare la tua interfaccia devi solo lasciare '/ async' oppure se stai usando la GUI "Aggiungi Service Refrence", fai semplicemente clic su "Avanzate", quindi deseleziona la casella "[Consenti generazione di operazioni asincrone] (http://i.stack.imgur.com/GNsK0.png)" –