我想在我的WCF应用程序中创建一个接口和几个类。例如: 界面ITable。 class Customer:ITable and Employee:ITable
之后如果可以创建......
[OperationContract]
IEnumerable<T> GetTable<T>() where T: ITable, new();
...在我的服务界面中。
我尝试了一次,应用程序变得野蛮。
我希望这能简化我在客户端的工作。 只需使用Client.GetTable或Client.GetTable获取我的ITables列表。
答案 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。