我正在尝试实现一个服务合同,其中包含一个采用通用接口的方法,并且该通用接口本身被赋予了一个接口参数。我用 ServiceKnownType 修饰了服务接口,我用常规 KnownType 修饰了服务实现,我用常规 KnownType 修饰了 datacontract 实现:
[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(ICallbacks))]
[ServiceKnownType(typeof(Batch<object>))]
[ServiceKnownType(typeof(Command))]
public interface IActions
{
[OperationContract]
IResponse TakeAction(IBatch<ICommand> commands);
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Reentrant)]
[KnownType(typeof(Batch<object>))]
[KnownType(typeof(Command))]
internal class Actions : IActions
{
}
[DataContract]
[KnownType(typeof(Command))]
public class Batch<T> : IBatch<T>
{
}
作为记录,我在那里有 Batch,因为您似乎只能为泛型类型表达一个 knowntype 一次——它似乎发出 BatchOfanyType,但我不知道如何处理这个问题。
我得到的例外是“将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。”
有什么明显的我做错了吗?只是不支持接口的通用接口吗?作为记录,我在这个项目中使用 C# 2.0 和 .NET 3.0。