0
  1. このインターフェイスを DC at Server に実装していません。

  2. クライアントでVS2008によって自動的に生成されたこの実装を取得しましたが、これは問題ありません。

  3. ここで、Reference.cs を編集して新しいフィールドを含めます (特定のサービス メソッドのサーバー DC (入力パラメーター) を区別します)。

  4. コンパイルし、古いサービスを指すコードを実行します。値を無視して新しいフィールドの値を設定しても (ブール型の例を true に設定)、正常に動作します。

  5. 次に、DCのサーバーに実装する必要があるのはなぜですか

  6. 前方互換性を期待しており、正常に動作しています。

  7. #3で追加したコードを削除します。コンパイル。

  8. 代わりに、サーバー DC コンパイルに同じフィールドを追加しました。

  9. ここで、クライアントからサーバー DC に少ないデータを送信するコードを実行すると、列が増えます。それはちょうどうまくいっています。これは、下位互換性が正常に機能していることを意味しますか?

  10. 私の理解が正しくないところを願っていますか?

私の環境は.Net 3.5 Sp1です

4

1 に答える 1

1

IExtensibleDataObjectは別の目的のためのものです。次のような操作があるとします。

[DataContract]
public class MyObject
{
  [DataMember]
  public string MyMember { get; set; }
}

[ServiceContract]
public class MyService
{
  [OperationContract]
  public MyObject Operation(MyObject object)
  {
    object.MyMember += " modified";
    return object;
  }
}

予想される動作は、Operationが変更されたパラメーターを返すことです。

ここで、クライアントでデータコントラクトを変更するとします。

[DataContract]
public class MyObject
{
  [DataMember]
  public string MyMember { get; set; }
  [DataMember]
  public string MyNewMember { get; set; }
}

次に、操作を呼び出します。

var client = new MyServiceClient();
var myObject = new MyObject
  {
    MyMember = "Member",
    MyNewMember = "Some value"
  }; 

MyObject returnedObject = client.Operation(myObject);

サービスのデータコントラクトはIExtensibleDataObjectを実装しておらず、MyNewMemberプロパティについても認識していません。returnsedObject.MyNewMemberにはどのような値がありますか?nullになります。ただし、サーバー側でIExtensibleDataObjectを実装すると、サーバーがこのプロパティについて何も知らなくても、「ある程度の値」になります。

于 2010-12-27T12:44:09.027 に答える