簡體   English   中英

WCF服務器自動獲取WCF客戶端版本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM