假設我有一個C#Web應用程序和C#WCF服務漂浮在某處。他們經營這樣的合同:使WCF解串器轉換寬容
[ServiceContract]
public interface IRemoteDeliveryService
{
[OperationContract]
Customer GetCustomer();
}
...與顧客產生:
[Serializable]
public class Customer
{
public string Name { get; set; }
public int Age { get; set; }
}
現在假設Web應用程序與一個特點,就是不相關的WCF服務,但是更新的原因客戶需要擴展。
[Serializable]
public class Customer
{
public string Name { get; set; }
public int Age { get; set; }
public int Income { get; set; } // new!
}
從經驗來看,如果服務引用和服務並不會立即更新,用戶將直到WCF服務推以反映新的對象開始收到此錯誤:錯誤在第1個位置21175.「結束元素」 '(無論)'來自命名空間'http://schemas.datacontract.org/2004/07/(whatever 2)'不是預期的。期待元素'_whatever3'。'
我已經做了所有我能想到的,以避免這種情況。我刪除了一些複雜對象的依賴關係,但是一些(比如Customer)非常重要,它們很難完全取消WCF通信。我已經嘗試阻止序列化的屬性,但WCF無論如何做。
我能做些什麼使WCF服務更加寬容由Web應用程序引入未來的額外屬性嗎?我可以修改服務和Web應用程序,只要修改服務可以最大限度地減少未來的重新部署。
您是否嘗試過使用'interface'作爲契約類型而不是'Customer'實現? – mrtig
我的經驗主要是使用'[DataContract]'裝飾數據契約,每個數據成員都用'[DataMember]'裝飾,這似乎允許添加沒有問題。 – zimdanen
JSON服務對此非常靈活(如果可能的話)。 JSON序列化器真正序列化消息,無論它包含什麼。 – lcryder