通过WCF服务传递指定的泛型类型

本文关键字:泛型类型 WCF 服务 通过 | 更新日期: 2023-09-27 18:18:41

我有以下类:

[DataContract]
[KnownType(typeof(SpecifiedItemCollection))]
public class ItemCollection<T> : IEnumerable where T : BaseItem
{
    private Dictionary<int, T> items = null;
    //Some NON-Generic Methods and Properties
    //Some methods like this:
    public T DoBla(int _1, bool _2) { ... }
}
[DataContract]
public class SpecifiedItemCollection : ItemCollection<SpecifiedItem>
{
    //...
}
[DataContract]
[KnownType(typeof(SpecifiedItem))]
public class BaseItem { ... }
[DataContract]
public class SpecifiedItem : BaseItem { ... }

如何通过WCF服务交付SpecifiedItemCollection ?

我的界面看起来像这样,但不幸的是它不能工作

[ServiceContract]
public interface IService
{
    [OperationContract]
    public SpecifiedItemCollection GetCol(int _1, bool _2);
}

附加信息:

是的,我看到你不能通过WCF传递泛型(例如直接ItemCollection),但我发现几个来源说,如果你指定泛型本身,你可以传递它们。

那么,我做错了什么?:)

问题是,它只是关闭连接。我能够在我的项目中引用服务,它相应地生成所需的类/文件。我可以实例化一个MyServiceNameClient,但是一旦我从我的服务调用一个方法,它将返回一个specificfieditemcollection,它关闭连接。

通过WCF服务传递指定的泛型类型

似乎我找到了一个临时的解决方案,尽管我不太喜欢它。

在上面的示例中,按如下方式更改SpecifiedItemCollection-Class:

[DataContract]
public class SpecifiedItemCollection
{
    public ItemCollection<SpecifiedItem> Base;
    public SpecifiedItemCollection()
    {
        Base = new ItemCollection<SpecifiedItem>();
    }
    //...
}

有了这个,我可以调用ItemCollection的函数,并在同一类型有我的specfieditemcollection - class与额外的方法和属性。

如果有人有其他的解决方案,我将非常高兴看到它。:)