Eksperymentuję z usługami WCF i napotkałem problem z przekazywaniem interfejsów.Przekazywanie interfejsu w usłudze WCF?
to działa:
[ServiceContract]
public interface IHomeService
{
[OperationContract]
string GetString();
}
ale to nie:
[ServiceContract]
public interface IHomeService
{
[OperationContract]
IDevice GetInterface();
}
Kiedy próbuję skompilować klienta nie powiedzie się na metodzie GetInterface. Dostaję wyjątek z informacją, że nie można przekształcić Object w IDevice.
Na kliencie klasa IHomeService poprawnie implementuje GetString z ciągiem znaków jako returntypem, ale GetInterface ma typ obiektu. Dlaczego nie jest to IDevice?
Przykro mi, ale nie sądzę, że rozumiem. Załóżmy, że chcę, aby metoda GetInterface zwróciła dwie różne klasy: SimpleDevice i AdvancedDevice, obie implementujące interfejs IDevice. Czy powinienem ustawić ServiceKnownType dla obu typów? –
Podczas deserializacji, w jaki sposób WCF wie, jakiego typu implementacja IHomeService ma być używana? – Will
Tak, myślę, że to dostałeś. Mówisz WCF o możliwych typach implementujących interfejs. Możesz przejść przez dowolny typ, tak długo, jak WCF wie, że te znane typy implementują interfejs i są serializowane. –