假设我有一个 C# Web 应用程序和一个 C# WCF 服务漂浮在某处。他们按照这样的合同运作:
[ServiceContract]
public interface IRemoteDeliveryService
{
[OperationContract]
Customer GetCustomer();
}
...与客户是:
[Serializable]
public class Customer
{
public string Name { get; set; }
public int Age { get; set; }
}
现在假设使用与 WCF 服务无关的功能更新 Web 应用程序,但会导致 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' '(whatever)' ' http://schemas.datacontract.org/2004/07/(whatever 2)' 不是预期的。期待元素'_whatever3'。
我已尽我所能避免这种情况。我删除了一些对复杂对象的依赖,但有些(如客户)非常重要,它们很难完全脱离 WCF 通信。我已经尝试阻止属性被序列化,但是 WCF 还是这样做了。
我可以做些什么来使 WCF 服务更能容忍 Web 应用程序引入的预期额外属性?我可以同时修改服务和 Web 应用程序,只要修改服务可以最大限度地减少未来的过度重新部署。