Предположим, у меня есть веб-приложение C# и служба C# 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/(чтоугодно 2 )' не ожидается. Ожидается элемент '_whatever3'.'
Я сделал все, что мог, чтобы избежать этой ситуации. Я удалил ряд зависимостей от сложных объектов, но некоторые из них (например, Customer) настолько важны, что их трудно полностью исключить из связи WCF. Я пытался блокировать сериализацию свойств, но WCF все равно делает это.
Что я могу сделать, чтобы сделать службу WCF более терпимой к потенциальным дополнительным свойствам, представленным веб-приложением? Я могу модифицировать и службу, и веб-приложение, если модификация службы сводит к минимуму будущие избыточные повторные развертывания.
interface
в качестве типа контракта вместо реализацииCustomer
? - person mrtig   schedule 23.09.2013[DataContract]
для оформления контрактов данных, при этом каждый член данных украшается[DataMember]
, и это, кажется, позволяет без проблем добавлять дополнения. - person zimdanen   schedule 23.09.2013