WCF返回泛型类型

本文关键字:泛型类型 返回 WCF | 更新日期: 2023-09-27 17:59:37

我想在WCF应用程序中创建一个接口和几个类。例如:接口ITable。类客户:ITable和员工:ITable

在这之后,如果有可能创造。。。

[OperationContract]
IEnumerable<T> GetTable<T>() where T: ITable, new();

在我的服务界面中。

我试过一次,但申请很激烈。

我希望这能简化我在客户方面的工作。只需使用Client.GetTable或Client.GetTable即可获取我的ITables列表。

WCF返回泛型类型

问题在于,因为它没有指定具体的类型,所以它允许客户端调用具有实现ITable但服务不知道的类型的服务。从客户端来看,它似乎可以工作,因为类符合通用约束,但随后服务无法对其进行反序列化

您可以将一个或多个ServiceKnownType属性添加到您的服务中,如下所示:

[ServiceKnownType(typeof(SomeTable))]
[ServiceKnownType(typeof(SomeOtherTable))]
[ServiceContract]
public interface IYourService
{
    [OperationContract]
    IEnumerable<T> GetTable<T>() where T: ITable, new();
}

这样,服务就知道要反序列化为什么具体类型。

您可以使用ServiceKnownType属性重载,该属性重载接受一个方法和声明该方法的类型。该方法应返回IEnumerable。