0

接続の両側の DataContracts がまったく同じであることを WCF に確認させることが可能かどうか疑問に思っています (そうでない場合は、接続しようとすると例外がスローされます)。

たとえば、次のサービスを想像してください。

[DataContract]
enum State
{
    [EnumMember]
    Red,
    [EnumMember]
    Yellow,
    [EnumMember]
    Green
}

[ServiceContract]
interface MyService
{
    [OperationContract]
    void SetState(State newState);
}

ここで、サービスが更新され、新しい状態 "Orange" がサポートされるようになったとします。上記のように、クライアントにはまだ DataContract があります。

クライアントとサービスが同じ DataContract を使用していないため、クライアントからサービスへのすべての呼び出しが失敗するようになりました。これは可能ですか?

助けてくれてありがとう!

4

1 に答える 1

2

ええと、実際にはそれほど多くのことを行うことはできませんが、XML名前空間を使用してデータコントラクトをバージョン管理することはできます。次のようになります。

[DataContract(Namespace="http://data.yourcompany.com/DataSchema/2009/11")]
enum State
{
    [EnumMember]
    Red,
    [EnumMember]
    Yellow,
    [EnumMember]
    Green
}

これで、クライアントはこのデータコントラクトをXML名前空間で使用します。

来月サーバー上のデータコントラクトを変更する場合は、XML名前空間を次のように変更できます。

[DataContract(Namespace="http://data.yourcompany.com/DataSchema/2009/12")]
enum State
{
 ....
}

「/2009/11」データコントラクトを使用していたすべてのサービスエンドポイントを廃止し、新しいデータコントラクトを持つ新しいエンドポイントのみを使用すると、クライアントはサービスメソッドを正常に呼び出すことができなくなります(2つのXML名前空間が原因) DataContractsが一致しません)。

多分それは行く方法でしょうか?

マーク

于 2009-11-10T11:57:21.883 に答える