1

これがセットアップです、私はMyAssemblyそのように見えるコレクションクラスを持っていました:

[Serializable()]
public class MyCollection : List<MyItem> //MyItem is also serializable
{
    public string MyProperty{ get; set; }

    //some methods for use by the current assembly
}

そして、wcfサービスを参照するアプリケーションがあり、wcfサービスはこれを参照していましたMyAssembly

問題:過去に問題なくクラスに多くの変更を加えましたが、最近、wcfサービスにいくつかの新しいメソッド(新しいプロパティなし)を追加しMyCollection、wcfサービスを再コンパイルして再デプロイした後、サービスを消費するアプリはすべて突然の呼び出し時にnullを返しますMyCollection

解決策と質問:アプリでサービス参照を更新すると、すべてが正常に戻りましたが、私の質問はなぜですか?何かが変更または削除されない限り、参照を更新しなくても新しいアイテムをクラスに追加できることを理解していました。誰かがこれを説明したり、どこかで私を紹介したりできますか?

4

1 に答える 1

1

wcfサービスへの参照を追加すると、サービスオブジェクトのコピー(実際の実際のコピーではなく、プロキシオブジェクトのようなもの)がクライアント側に配置されます。したがって、wcfサービスオブジェクトを更新しても、クライアントには古い(無効な)コピーのみが残ります。wcfサーバーのServiceContractまたはDataContractで変更が行われる場合は、常にクライアント側で参照を更新する必要があります。

于 2012-10-31T18:47:07.727 に答える