これは、サービス/データ コントラクトのバージョン管理のベスト プラクティスに精通しているユーザーにとっては簡単です。このバージョニングを正しい方法で使用することを確認したいと思います。
では、サービス コントラクトがあるとします。
[ServiceContract(Namespace="http://api.x.com/Svc1")]
public interface IService1
{
[OperationContract(Name = "AddCustomer")]
bool AddCustomer(DTOCustomer1 customer);
}
およびデータ コントラクト:
[DataContract(Name="Customer", Namespace="http://api.x.com/Svc1/2011/01/DTO")]
public class DTOCustomer1
{
[DataMember(Name="Name")]
public string Name { ... }
}
後者を別のものに変更する必要がある場合: (以下は単なる例です)
[DataContract(Name="Customer", Namespace="http://api.x.com/Svc1/2012/01/DTO")]
public class DTOCustomer2
{
[DataMember(Name="Name")]
public string Name { ... }
[DataMember(Name="Address")]
public DTOAddress Address { ... }
}
...では、サービスから DTOCustomer1 の代わりに DTOCustomer2 を使用して、古いクライアントと新しいクライアントが準拠するようにするにはどうすればよいでしょうか? この場合、何が推奨されますか?サービス契約は変更されますか? 私の知る限り、サービス契約を変更する必要はありません。サービス契約はどのようになりますか? 新しいエンドポイントが必要ですか? 新しいデータ コントラクトを使用する新しい操作コントラクトが必要ですか?
EDIT1: 単に変更する
bool AddCustomer(DTOCustomer1 顧客);
の中へ
bool AddCustomer(DTOCustomer2 顧客);
しましょう?
EDIT2: DTOCustomer2 の名前空間は異なるため、EDIT1 への回答はNoですが、名前空間が同じであれば機能する可能性があります。それでも、ここで何が最善なのかはわかりません。誰かが良い答えを出してくれることを期待しています.
前もって感謝します!