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:
WCF Service
mit der Standardvorlage von Visual Studio 2013 IService1.cs
und Service1.svc
wurde beibehalten.
Die IService1.cs
wurde in:
Die Service1.svc
wurde in:
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:
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?
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.