Изменение интерфейса, используемого для WebChannelFactory

Если у меня есть приложение Сервер / Клиент, которое ссылается на одну и ту же DLL, которая содержит интерфейсы, используемые для сервера REST и для WebChannelFactory чтобы ссылаться на веб-сервер, что произойдет с устаревшими клиентами, если интерфейс Серверов получит и обновит? Например, скажем, первая версия приложения выталкивается со следующим интерфейсом:

[ServiceContract]
public interface ISampleInterface
{
    [OperationContract]
    [WebInvoke(UriTemplate = "/PutDevice", ResponseFormat = WebMessageFormat.Xml, RequestFormat = WebMessageFormat.Xml)]
    void PutDevice(Device device);
}

[DataContract(Namespace = "")]
public class Device
{
    [DataMember]
    public Guid id { get; set; }

    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Description { get; set; }
} // End of Device

Это то, что служба REST использует в качестве контракта, и агент будет иметь код, подобный следующему:

WebChannelFactory<ISampleInterface> client = new WebChannelFactory<IGridVisionService>(new Uri(targetHost));
ISampleInterface sampleInterface = client.CreateChannel();
sampleInterface.PutDevice(new Device() { id = Guid.Empty(), Name = "Test Device", Description = "Test Device Description" });

Таким образом, клиентское приложение уже развернуто на сотнях компьютеров, но мы понимаем, что для версии мы также хотим, чтобы клиент отправлял свой домен, поэтому мы модифицируем контракт данных устройства следующим образом:

[DataContract(Namespace = "")]
public class Device
{
    [DataMember]
    public Guid id { get; set; }

    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Domain { get; set; }

    [DataMember]
    public string Description { get; set; }
} // End of Device

Обновление сервера легко, но теперь есть множество агентов, которые не знают о Домене. Как правильно справиться с этой ситуацией? Моей единственной мыслью было не использовать DataContract, а XElement чтобы я мог вручную разобрать. Затем добавьте логин на сервер для рассмотрения пропавшего домена, но это выглядит неаккуратно. Есть ли лучшее решение, которое я пропускаю?

1 ответ

Решение

Я смог проверить это сам. В случае, когда мое клиентское устройство связывалось с dll, который не знал о параметре Domain, вызов метода все же завершился успешно, а параметр Domain был просто нулевым. Это результат, на который я надеялся!

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