私は数か月前に1つのWCFサービスを作成しましたが、新しいデータメンバーの追加や一部のデータメンバーの削除などのWCFサービスをアップグレードし、古いクライアント用ではない唯一の新しいWCFクライアントです。WCFサーバーはWCFクライアントのバージョンを自動的に取得します
サービスが新しいWCFクライアントまたは古いWCFクライアントによって呼び出されたことをどのように知ることができますか?
サービス
[ServiceContract]
public interface IService1
{
void Insert(WCFClientInfo wcfClientInfo, Employee employee);
}
Implementaion
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
です。そのために私はWCFClientInfo
に1つの以上のフィールドClientVersion
を追加するよう
従業員
[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
[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ファイルにいくつかの定数バージョンフィールドを追加するなどの変更を加えてもかまいません。クライアントがサーバーに要求を出したときに自動的に送信されますか?