C# 从wcf服务中的类继承

C# 从wcf服务中的类继承,c#,.net,wcf,inheritance,C#,.net,Wcf,Inheritance,我想从位于WCF服务中的类继承。继承工作正常(我在我的子类中看到基类的属性),当我尝试从服务调用方法并将childtype作为参数而不是basetype传递时,就会出现问题 WCF服务中的基类(Pet): 当我试着打这样的电话时: Dog dog = new Dog() { Color = "Black", Name = "Pluto", HasPedigree = true,

我想从位于WCF服务中的类继承。继承工作正常(我在我的子类中看到基类的属性),当我尝试从服务调用方法并将childtype作为参数而不是basetype传递时,就会出现问题

WCF服务中的基类(
Pet
):

当我试着打这样的电话时:

        Dog dog = new Dog()
        {
            Color = "Black",
            Name = "Pluto",
            HasPedigree = true,
            Race = "Travolta"
        };

        _client.BringPet(dog);
我得到一个
CommunicationException
,它表示方法
BringPet(Pet)
不需要类型
Dog
。 我可以通过在服务端设置
KnownType
属性来解决此问题,但由于我的服务必须不知道类型
Dog
,因此我无法设置
KnownType
ServiceKnownType
属性


有人能帮我吗?

如果您希望继承返回的类而不是服务合同中定义的类,您需要通过
ServiceKnownType
属性让WCF知道这一事实:

[ServiceContract]
[ServiceKnownType(typeof(Dog))]
public interface IService
{
    [OperationContract]
    void BringPet(Pet pet);

    [OperationContract]
    void TakePet(Pet pet);

    [OperationContract]
    List<Pet> GetAllPets();
}
[DataContract]
[KnownType(typeof(Dog))]
public class Pet
{
.....
}
将数据协定类型与可在其位置使用的其他类型关联


一种方法或另一种方法:您必须让WCF运行时知道您的额外类型-WCF不能仅仅通过检查.NET类型继承来确定这一事实。

如果您希望继承返回的类而不是服务合同中定义的类,您需要通过
ServiceKnownType
属性让WCF知道这一事实:

[ServiceContract]
[ServiceKnownType(typeof(Dog))]
public interface IService
{
    [OperationContract]
    void BringPet(Pet pet);

    [OperationContract]
    void TakePet(Pet pet);

    [OperationContract]
    List<Pet> GetAllPets();
}
[DataContract]
[KnownType(typeof(Dog))]
public class Pet
{
.....
}
将数据协定类型与可在其位置使用的其他类型关联


这样或那样:您必须让WCF运行时知道您的额外类型-WCF不能仅仅通过检查.NET类型继承来了解这一事实。

我认为这与这个问题非常相似:


正如您将看到的,如果不使您的服务操作更通用,就没有真正简单的方法来实现这一点。

我认为这与这个问题非常相似:


正如您将看到的,如果不让您的服务操作更通用,就没有真正简单的方法可以做到这一点。

谢谢您的回答。我会按照你的解释去做,但我不能,因为WCF服务一定不知道额外的类型。我试试通用的解决方案。@marc_可以看看这里吗?我也有类似的问题谢谢你的回答。我会按照你的解释去做,但我不能,因为WCF服务一定不知道额外的类型。我试试通用的解决方案。@marc_可以看看这里吗?我有非常相似的问题谢谢,我来试试。嗨,@Stomber,也许你能看看这里吗?谢谢,我来试试。嗨,@Stomber,也许你能看看这里吗?