12

DataMembers の1 つにa を追加したいと思いDataContractます。DataMemberいずれかのパーティが更新されていない場合、既存のサーバーとクライアントが新しいサーバーの存在下でどのように動作するかを知りたいです。

オプションにする方法があることを思い出しましたがDataMember、すべてのシナリオで機能するかどうかは疑問です。

  • 更新されたクライアント => 古いサーバー
  • 古いクライアント => 更新されたサーバー
  • 更新されたクライアント <= 古いサーバー
  • 古いクライアント <= 更新されたサーバー
4

1 に答える 1

15

WCF は、認識しない新しいメンバーを適切に処理します。コントラクトの消費者 (クライアント側またはサーバー側のいずれか) は単にそのメンバーを「見る」ことができないため、結果として、新しいメンバーがIsRequired=true プロパティになることはありません。

さらに、WCF は、DataContract が実装している限り、コンポーネント間で新しいプロパティを透過的にブリッジしますIExtensibleDataObject。たとえば、メッセージ パスが次の場合:

更新されたクライアント => 古いサーバー => 更新されたサーバー

その後、チェーンの最後にある更新されたサーバーは引き続き新しい DataMember を認識します。ただし、「古いサーバー」はその新しい DataMember を認識しません。

古いサーバーが更新されたクライアントにメッセージを送信する場合、新しい DataMember はdefault(type)、新しいクライアントでの逆シリアル化時に設定されます。

DataContract のバージョン管理のベスト プラクティスの詳細については、こちらを参照してください。

また、この記事では、重大な変更と重大でない変更の違いについて説明します。

于 2011-04-11T17:07:55.687 に答える