Тестирование для реализации интерфейса в WCF / SOA - PullRequest
0 голосов
/ 04 мая 2010

У меня есть служба отчетов, которая реализует несколько отчетов. Каждый отчет требует определенных параметров. Группы логически связанных параметров помещаются в интерфейс, который затем реализует отчет:

[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; проверка того, реализует ли объект интерфейс, является одной из основных функций, необходимых для интерфейса удаленного взаимодействия?

1 Ответ

0 голосов
/ 04 мая 2010

Полагаю, вам нужно просто добавить атрибут ServiceContract в определения интерфейса, как в

[ServiceContract]
public interface IReport
{
    [OperationContract]
    string PrintedBy { get; set; }
}

и т.д ...

...