Sto tentando di implementare un contratto di servizio che contiene un metodo che utilizza un'interfaccia generica e che a tale interfaccia generica viene assegnato un parametro di interfaccia. Ho decorato l'interfaccia di servizio con ServiceKnownType, ho decorato l'implementazione del servizio con KnownType regolare, e ho decorato l'attuazione DataContract con KnownType regolare:WCF: è possibile la serializzazione di interfacce generiche?
[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>
{
}
Per la cronaca, ho Batch lì perché sembra che puoi esprimere un tipo noto solo per un tipo generico una volta: sembra emettere BatchOfanyType, ma non sono sicuro di come gestirlo.
L'eccezione che sto ottenendo è "Aggiungi tutti i tipi non noti staticamente alla lista dei tipi conosciuti -., Ad esempio, utilizzando l'attributo KnownTypeAttribute o aggiungendoli alla lista dei tipi noti passati a DataContractSerializer"
C'è qualcosa di ovvio che sto sbagliando? Le interfacce generiche di interfacce non sono supportate? Per la cronaca sono su C# 2.0 e .NET 3.0 per questo progetto.
Sì, ho modificato la piattaforma che sto usando quando ho pensato alla covarianza in C# 4.0. Oh, per l'aggiornamento. – bwerks