如果我有一个服务器/客户端应用程序都引用相同的 DLL,该 DLL 包含用于 REST 服务器和用于WebChannelFactory
引用 Web 服务器的接口,如果服务器接口获取并更新,旧客户端会发生什么情况?例如,应用程序的第一版通过以下界面推出:
[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
我可以手动解析的。然后添加登录到服务器来处理丢失域的情况,但这看起来很草率。有没有我忽略的更好的解决方案?