修改用于WebChannelFactory的接口

时间:2012-05-02 12:07:31

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

如果我有一个服务器/客户端应用程序都引用包含用于REST服务器的接口的相同DLL,并且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。然后添加登录到服务器以处理丢失域的情况,但这似乎很草率。我有一个更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

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