Обеспечение устойчивости десериализатора WCF к изменениям

Предположим, у меня есть веб-приложение C# и служба CF WCF где-то там. Они работают по контракту, как это:

[ServiceContract]
public interface IRemoteDeliveryService
{
    [OperationContract]
    Customer GetCustomer();
}

... с клиентом:

[Serializable]
public class Customer
{
    public string Name { get; set; }
    public int Age { get; set; }
}

Теперь предположим, что веб-приложение обновлено с помощью функции, которая не относится к службе WCF, но приводит к расширению Customer.

[Serializable]
public class Customer
{
    public string Name { get; set; }
    public int Age { get; set; }
    public int Income { get; set; } // new!
}

Исходя из опыта, если ссылка на службу и служба не обновляются немедленно, пользователи начнут получать эту ошибку до тех пор, пока служба WCF не будет вытолкнута для отражения нового объекта: Ошибка в строке 1, позиция 21175. "EndElement" (что угодно) "из пространства имен". " http://schemas.datacontract.org/2004/07/(whatever 2)" не ожидается. Ожидается элемент '_whwhat3'.'

Я сделал все, что мог придумать, чтобы избежать этой ситуации. Я удалил ряд зависимостей от сложных объектов, но некоторые (например, Customer) настолько важны, что их трудно полностью исключить из коммуникации WCF. Я пытался заблокировать свойства от сериализации, но WCF делает это в любом случае.

Что можно сделать, чтобы сделать службу WCF более терпимой к возможным дополнительным свойствам, представленным веб-приложением? Я могу изменить как службу, так и веб-приложение, при условии, что изменение службы минимизирует будущие перераспределения.

1 ответ

Используйте объекты передачи данных (DTO). Эти классы должны принадлежать службе и изменяться только в случае обновления службы. Сопоставьте бизнес-объекты, объекты, модели и т. Д. С вашими DTO, используя что-то вроде AutoMapper.

Слои разделения (и убедитесь, что слои не перетекают друг в друга), позволят вам вносить изменения, подобные описанным вами, без воздействия на другие слои.

Другие вопросы по тегам