【发布时间】:2017-11-17 04:02:49
【问题描述】:
几个月前我创建了一个 WCF 服务,现在我将升级该 WCF 服务,例如添加新数据成员并删除一些数据成员,并在升级后的服务中为唯一的新 WCF 客户端执行一些额外任务,而不是老客户。
如何知道服务是被新的 WCF 客户端调用还是被旧的 WCF 客户端调用?
服务
[ServiceContract]
public interface IService1
{
void Insert(WCFClientInfo wcfClientInfo, Employee employee);
}
实施
public class Service1 : IService1
{
public void Insert(WCFClientInfo wcfClientInfo, Employee employee)
{
// My Task
}
}
员工
[DataContract]
public class Employee
{
[DataMember(Order = 1)]
public int ID { get; set; }
[DataMember(Order = 2)]
public string Name { get; set; }
[DataMember(Order = 3)]
public string MobileNo { get; set; }
}
WCFClientInfo
[DataContract]
public class WCFClientInfo
{
[DataMember]
public string UserName { get; set; }
[DataMember]
public string Password { get; set; }
}
现在我在Employee 数据合约中添加新字段是EMail。
员工
[DataContract]
public class Employee
{
[DataMember(Order = 1)]
public int ID { get; set; }
[DataMember(Order = 2)]
public string Name { get; set; }
[DataMember(Order = 3)]
public string MobileNo { get; set; }
[DataMember(Order = 4)]
public string EMail { get; set; }
}
所以现在我想知道 WCF 客户端用户是旧用户还是新用户,为此我在 WCFClientInfo 中添加了一个字段 ClientVersion。
WCFClientInfo
[DataContract]
public class WCFClientInfo
{
[DataMember]
public string UserName { get; set; }
[DataMember]
public string Password { get; set; }
[DataMember]
public string ClientVersion { get; set; }
// It must be filled automatically by the WCF client
// Means no need to provide by the client manually.
}
新实施:
public void Insert(WCFClientInfo wcfClientInfo, Employee employee)
{
if (string.IsNullOrWhiteSpace(wcfClientInfo.ClientVersion) ||
wcfClientInfo.ClientVersion == "V1.0.0")
{
SendSMS(employee.MobileNo);
}
else if (wcfClientInfo.ClientVersion == "V2.0.0")
{
SendEMail(employee.EMail);
}
}
所以以前WCFClientInfo 类中没有ClientVersion 字段,但在升级后的WCF 服务中将有ClientVersion 字段。
所以现在的问题是我想要 ClientVersion 类中的 WCF 客户端版本自动并且需要手动传递它作为客户端。
我是否可以在客户端的 WSDL 文件中进行更改,例如添加一些常量版本字段,并且当客户端向服务器发出请求时,该常量版本字段将自动发送?
【问题讨论】: