3

さて、ここでは何もありません。サービスのバージョン管理とデータ コントラクトのバージョン管理に関するベスト プラクティス ( http://msdn.microsoft.com/en-us/library/ms733832.aspx ) を読んだ後、すべてがどのように行われたかをほぼ理解しました。データ コントラクトにアジャイル バージョニングを使用する予定ですが、WorkRequestV2 を作成して新しいプロパティを追加するか、単に新しいプロパティを WorkRequestV1 に追加するかの違いやより良い方法がわかりません。今、私は両方の方法を試してみましたが、うまくいきましたが、WorkRequestV2 を作成するときに、WorkRequestV1 にプロパティを追加するだけでなく、WorkRequestV2 を使用するように ServiceContractor を変更する必要があります。違いはなんですか?

私が見た例はここにありました ( http://msdn.microsoft.com/en-us/library/ms731138.aspx ) CarV1 と CarV2 は、HorsePower を CarV1 に追加し、まったく新しいコントラクトを作成する必要はありません。

[DataContract(Name = "WorkRequest")]
public class WorkRequestV1 : IExtensibleDataObject {
    [DataMember(Name = "workrequest",Order=1,IsRequired=true)]
    public int workrequest { get; set; }
    [DataMember(Name = "CQ")]
    public string CrewHeadquarter { get; set; }
    [DataMember(Name = "JobCode")]
    public string JobCode { get; set; }
    [DataMember(Name = "JobType")]
    public string JobType { get; set; }
    [DataMember(Name = "Latitude")]
    public string Latitude { get; set; }
    [DataMember(Name = "Longitute")]
    public string Longitute { get; set; }

    private ExtensionDataObject theData;
    public ExtensionDataObject ExtensionData {
        get {
            return theData;
        }
        set {
            theData = value;
        }
    }
}
4

1 に答える 1

1

データ コントラクトのバージョン管理をもう一度読んでください (2 番目のリンク)。

以下はそのページからの引用です。

重大な変更と重大でない変更

データ コントラクトへの変更は、互換性に影響する場合と影響しない場合があります。データ コントラクトが非破壊的な方法で変更されると、古いバージョンのコントラクトを使用するアプリケーションは新しいバージョンのコントラクトを使用するアプリケーションと通信でき、新しいバージョンのコントラクトを使用するアプリケーションは古いバージョンを使用するアプリケーションと通信できます。一方、重大な変更は、一方向または双方向の通信を妨げます。

あなたの場合、いくつかの追加のプロパティを追加することは、破壊的でない変更です。厳密なスキーマ検証がない限り (新しいプロパティに「必須」のマークが付いていないなど)、新しいデータ コントラクトを作成するのではなく、既存のデータ コントラクトにプロパティを安全に追加できます。

新しいサービスと通信する古いクライアントは引き続き機能し、新しいプロパティの値はデフォルト値のままです。新しいプロパティは無視されるため、古いサービスと通信する新しいクライアントも機能します。

しかし、ご覧のとおり、新しいクライアントが新しいサービスと通信し、古いクライアントが古いサービスと通信することをどのように保証できるかという問題に直面することになります。これが問題でなければ、問題はありません。そうしないと、新しいデータ コントラクトを導入する必要がある場合があります。

参考文献:

MSDN サービスのバージョン管理

IBM Web サービスのバージョン管理のベスト プラクティス

Oracle Web サービスのバージョン管理

WebService のバージョニングのベスト プラクティスは何ですか?

于 2013-03-12T21:24:20.987 に答える