【问题标题】:Modifying the interface used for WebChannelFactory修改用于 WebChannelFactory 的接口
【发布时间】:2012-05-11 21:47:15
【问题描述】:

如果我有一个服务器/客户端应用程序都引用同一个 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。然后添加登录到Server 来处理丢失Domain 的情况,但这看起来很草率。有没有我忽略的更好的解决方案?

【问题讨论】:

    标签: c# .net web-services interface webchannelfactory


    【解决方案1】:

    我能够自己测试这个。在我的客户端设备链接到一个不知道 Domain 参数的 dll 的情况下,方法调用仍然成功并且 Domain 参数只是 null。这是我希望的结果!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多