WCF返回泛型类型

时间:2016-07-31 17:20:45

标签: c# wcf

我想在我的WCF应用程序中创建一个接口和几个类。例如: 界面ITable。 class Customer:ITable and Employee:ITable

之后如果可以创建......

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

...在我的服务界面中。

我尝试了一次,应用程序变得野蛮。

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

2 个答案:

答案 0 :(得分:0)

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

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

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

这样服务就知道要反序列化的具体类型。

答案 1 :(得分:0)

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