[英]WCF Server get WCF client version automatically
幾個月前,我已經創建了一個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客戶端用戶是舊的還是新的,因此我在ClientVersion
中添加了另一個字段WCFClientInfo
。
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文件中進行更改,例如添加一些恆定版本字段,並且當客戶端向服務器發出請求時,該恆定版本字段將自動發送?
您沒有控制舊客戶端。 他們已經有舊的WSDL,並且將發送沒有任何新字段的消息。
通常,在合同中添加新字段是可以的-當您收到消息時,它們只會得到null
值。
但是,刪除字段很危險,因為WCF基礎結構將無法反序列化來自舊客戶端的傳入消息。
當您想大量更改合同時,通常使用的方法是在端點URL中引入版本控制。
例如,舊網址可能是http://yourhost.com/YourService/
,而新網址將是http://yourhost.com/YourServiceV2/
,可以在其中使用新合同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.