Ich experimentiere mit WCF-Diensten und stoße auf ein Problem mit der Übergabe von Schnittstellen.Übergeben Schnittstelle in einem WCF-Dienst?
Dies funktioniert:
[ServiceContract]
public interface IHomeService
{
[OperationContract]
string GetString();
}
aber nicht:
[ServiceContract]
public interface IHomeService
{
[OperationContract]
IDevice GetInterface();
}
Wenn ich versuche, den Client es nicht auf der GetInterface Methode zu kompilieren. Ich bekomme eine Exception, die besagt, dass das Objekt nicht in IDevice konvertiert werden kann.
Auf der Clientseite implementiert die IHomeService-Klasse GetString korrekt mit einem String als Returnntype, aber das GetInterface hat einen returntype des Objekts. Warum ist es nicht IDevice?
Es tut mir leid, aber ich glaube nicht, dass ich verstehe. Angenommen, die GetInterface-Methode soll zwei verschiedene Klassen zurückgeben, SimpleDevice und AdvancedDevice, die beide die IDevice-Schnittstelle implementieren. Sollte ich dann ServiceKnownType für beide Typen festlegen? –
Wie erkennt WCF bei der Deserialisierung, welchen Implementierungstyp von IHomeService verwendet wird? – Will
Ja, ich glaube du hast es verstanden. Sie teilen WCF die möglichen Typen mit, die die Schnittstelle implementieren. Sie können jeden beliebigen Typ übergeben, solange WCF weiß, dass diese bekannten Typen die Schnittstelle implementieren und serialisierbar sind. –