通过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,它关闭连接。
似乎我找到了一个临时的解决方案,尽管我不太喜欢它。
在上面的示例中,按如下方式更改SpecifiedItemCollection-Class:
[DataContract]
public class SpecifiedItemCollection
{
public ItemCollection<SpecifiedItem> Base;
public SpecifiedItemCollection()
{
Base = new ItemCollection<SpecifiedItem>();
}
//...
}
有了这个,我可以调用ItemCollection的函数,并在同一类型有我的specfieditemcollection - class与额外的方法和属性。
如果有人有其他的解决方案,我将非常高兴看到它。:)