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

问题描述 投票:2回答:1

我有以下课程:

[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传递Generic(例如直接使用ItemCollection),但我发现有几个来源说你可以通过它们来指定Generic本身。

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

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

c# wcf generics
1个回答
0
投票

好像我找到了一个临时解决方案,虽然我不太喜欢它。

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

[DataContract]
public class SpecifiedItemCollection
{
    public ItemCollection<SpecifiedItem> Base;

    public SpecifiedItemCollection()
    {
        Base = new ItemCollection<SpecifiedItem>();
    }

    //...
}

有了这个,我能够调用ItemCollection的函数,并且在同一个Type中有我的SpecifiedItemCollection-Class以及额外的方法和属性。

如果有人有另一种解决方案,我会非常乐意看到它。 :)

© www.soinside.com 2019 - 2024. All rights reserved.