Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 修改用于WebChannel Factory的接口_C#_.net_Web Services_Interface_Webchannelfactory - Fatal编程技术网

C# 修改用于WebChannel Factory的接口

C# 修改用于WebChannel Factory的接口,c#,.net,web-services,interface,webchannelfactory,C#,.net,Web Services,Interface,Webchannelfactory,如果我有一个服务器/客户端应用程序,它同时引用同一个DLL,其中包含用于REST服务器的接口和用于WebChannelFactory引用web服务器的接口,那么如果服务器接口得到更新,旧客户端会发生什么情况?例如,假设应用程序的版本1通过以下接口推出: [ServiceContract] public interface ISampleInterface { [OperationContract] [WebInvoke(UriTemplate = "/PutDevice", Re

如果我有一个服务器/客户端应用程序,它同时引用同一个DLL,其中包含用于REST服务器的接口和用于
WebChannelFactory
引用web服务器的接口,那么如果服务器接口得到更新,旧客户端会发生什么情况?例如,假设应用程序的版本1通过以下接口推出:

[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
。然后将登录添加到服务器,以处理丢失域的情况,但这看起来很草率。有没有我忽略的更好的解决方案?

我自己能够测试这个。如果我的客户端设备链接到一个不知道域参数的dll,那么方法调用仍然成功,并且域参数为空。这就是我所希望的结果