У меня есть служба отчетов, которая реализует несколько отчетов. Каждый отчет требует определенных параметров. Группы логически связанных параметров помещаются в интерфейс, который затем реализует отчет:
[ServiceContract]
[ServiceKnownType(typeof(ExampleReport))]
public interface IService1
{
[OperationContract]
void Process(IReport report);
}
public interface IReport
{
string PrintedBy { get; set; }
}
public interface IApplicableDateRangeParameter
{
DateTime StartDate { get; set; }
DateTime EndDate { get; set; }
}
[DataContract]
public abstract class Report : IReport
{
[DataMember]
public string PrintedBy { get; set; }
}
[DataContract]
public class ExampleReport : Report, IApplicableDateRangeParameter
{
[DataMember]
public DateTime StartDate { get; set; }
[DataMember]
public DateTime EndDate { get; set; }
}
Проблема в том, что WCF DataContractSerializer не предоставляет эти интерфейсы в моей клиентской библиотеке, поэтому я не могу написать общий отчет, генерирующий интерфейс, который я планирую. Может ли WCF предоставлять эти интерфейсы или это ограничение сериализатора? Если последний случай, то каков канонический подход к этому шаблону ОО?
Я посмотрел на NetDataContractSerializer, но он не является официально поддерживаемой реализацией (что означает, что это не вариант в моем проекте). В настоящее время я смирился с тем, что включил интерфейсы в библиотеку, которая является общей для службы и клиентского приложения, но это кажется мне ненужной дополнительной зависимостью. Конечно, есть более простой способ сделать это? У меня сложилось впечатление, что WCF должен был заменить удаленное взаимодействие .NET; проверка того, реализует ли объект интерфейс, является одной из основных функций, необходимых для интерфейса удаленного взаимодействия?