Я хочу наследовать от класса, который находится в службе WCF. Наследование работает нормально (я вижу свойства базового класса в моем дочернем классе), моя проблема возникает, когда я пытаюсь вызвать метод из службы и передать дочерний тип в качестве параметра, а не базовый тип.
Базовый класс в службе WCF (Pet
):
[ServiceContract]
public interface IService
{
[OperationContract]
void BringPet(Pet pet);
[OperationContract]
void TakePet(Pet pet);
[OperationContract]
List<Pet> GetAllPets();
}
[DataContract]
public class Pet
{
private string _name;
private string _color;
[DataMember]
public string Name
{
get { return _name; }
set { _name = value; }
}
[DataMember]
public string Color
{
get { return _color; }
set { _color = value; }
}
}
Класс на клиенте (Dog
наследуется от Pet
):
[DataContract()]
class Dog : PetService.Pet
{
[DataMember()]
public bool HasPedigree { get; set; }
[DataMember()]
public string Race { get; set; }
}
Когда я пытаюсь вызвать что-то вроде этого:
Dog dog = new Dog()
{
Color = "Black",
Name = "Pluto",
HasPedigree = true,
Race = "Travolta"
};
_client.BringPet(dog);
Я получаю CommunicationException
, который говорит, что тип Dog
не ожидается методом BringPet(Pet pet)
.
Я бы решил эту проблему, установив атрибуты KnownType
на стороне службы, но поскольку моя служба не должна знать тип Dog
, я не могу установить атрибуты KnownType
или ServiceKnownType
.
Может кто-нибудь мне помочь?