Fehler: Wird im WCF-Test-Client nicht unterstützt, da der Typ System.Threading.Tasks verwendet wird

8

Ich werde diese Frage stellen, obwohl ich sehe, dass es nur wenige andere gibt. Ich finde jedoch keine befriedigende Lösung, warum ich diesen Fehler bekomme oder wie ich ihn lösen kann.

Also musste ich heute zu Testzwecken einen Dienst auf meinem lokalen Computer hosten. Der Service ist eine einzige WCF-Servicelösung und es funktioniert so lange, wie ich weiß. Als ich jedoch das Projekt heruntergeladen und versucht habe, den Dienst auf meinem lokalen Rechner zu hosten, bekam ich den Fehler vom Titel:

  

Diese Operation wird im WCF-Testclient nicht unterstützt, da sie den Typ System.Threading

verwendet

Als ich dann nach Hause kam, beschloss ich, einen Service mit einigen asynchronen Methoden zu machen und dem auf den Grund zu gehen. Wie auch immer, ich war wirklich überrascht, als ich genau denselben Fehler bei einem fast leeren Projekt bekommen habe, das den System.Threading.Tasks nirgends verwendet (oder zumindest so aussieht).

Also, was ich getan habe:

  • Erstellt neue WCF Service mit der Standardvorlage von Visual Studio 2013
  • Die Standarddatei IService1.cs und Service1.svc wurde beibehalten.
  • Die IService1.cs wurde in:

    geändert %Vor%
    • Die Service1.svc wurde in:

      geändert

      mit System; Verwenden von System.Collections.Generic; Verwenden von System.Linq; Verwenden von System.Runtime.Serialization; Verwenden von System.ServiceModel; Verwenden von System.ServiceModel.Web; Verwenden von System.Text;

      Namensraum WcfService {    Öffentliche Klasse Service1: IService1    {       public int GetEmpId (int id)       {         Rücksende-ID;       }   } }

Und lassen Sie den Standard web.config , der wie folgt aussieht:

%Vor%

Ich habe nicht einmal versucht, Task , Threading oder etwas ähnliches zu verwenden, wollte nur sehen, dass mein Dienst läuft und ich kann Dinge hinzufügen und sehen, wann genau ich den Fehler bekomme Aber zu meiner Überraschung, nachdem ich Service1.svc als meine Startup-Klasse gesetzt und versucht habe, das Projekt auszuführen, habe ich den gleichen Fehler:

  

Diese Operation wird im WCF-Testclient nicht unterstützt, da sie den Typ System.Threading

verwendet

Ok, jetzt bin ich komplett verloren. Ich habe diesen Fehler nach mehreren Versuchen erhalten, mein Projekt auszuführen. Kurz bevor ich diese Frage gepostet habe, habe ich es erneut versucht und dieses Mal habe ich den Fehler nicht erhalten. In der Tat habe ich gerade meinen Klienten beendet und ich kann die GetEmpId() Methode verbrauchen.

Also, was ist hier los? Dies ist ein Screenshot, wenn ich mein Projekt erstelle:

Ich habe keine Methode GetEmpIdAsync() . Ich habe nicht versucht, es hinzuzufügen. Und wie kommt es, dass es nicht mehrere Male gebaut wird und ich plötzlich mit der Methode arbeiten kann, die ich von Anfang an implementiert habe?

    
Leron 28.10.2014, 18:41
quelle

1 Antwort

9

WCF stellt automatisch eine synchrone und eine asynchrone Schnittstelle für jede Ihrer Methoden bereit. Beide Methoden rufen GetEmpId synchron auf der Serverseite auf, der Unterschied besteht darin, dass das Ergebnis auf der Clientseite synchron oder asynchron sein wird.

Wenn Sie Ihre Klasse zu

gemacht haben %Vor%

Sie würden immer noch int GetEmpId(int id) auf dem Testwerkzeug sehen. WCF ist intelligent genug, um die beiden Versionen derselben Funktion zuzuordnen.

Der "Fehler", den Sie sehen, ist nur eine Einschränkung des Test-Tools von Visual Studio. Beide Funktionen rufen die gleiche serverseitige Funktion auf, sodass es keine zwingende Kraft gibt, Microsoft dazu zu bringen, Unterstützung hinzuzufügen. Es gibt keinen tatsächlichen Fehler. Wenn Sie die Async-Version wirklich testen möchten, müssen Sie einen eigenen Test-Client schreiben, der die Funktion aufruft.

    
Scott Chamberlain 28.10.2014, 18:49
quelle

Tags und Links