1

WCFサービス(ネットTCPバインディング)を介して送信したいCLRクラスがあります。クライアントとサーバーの両方が同じデータクラスとサービスインターフェイスを使用します。スタブは生成されません。2つのクラスの基本的な部分は次のとおりです。

[DataContract]
public class ContainerClass
{
    //some primitive data with [DataMember] ...

    [DataMember] /**/
    public virtual BindingList<ItemClass> Items{ get; private set; }
}

[DataContract]
public class ItemClass
{
    //some primitive data with [DataMember] ...

    public ContainerClass Parent { get; set; } // (no [DataMember])
}

(でマークされた)の[DataMember]属性を省略した場合、データは正しく送信されます。もちろん、アイテムなし。BindingList/**/

を追加するとすぐに[DataMember]、タイプのオブジェクトを返すサービスメソッドの呼び出しがContainerClass失敗し、次のエラーメッセージが表示されます。

サーバーは意味のある応答を提供しませんでした。これは、コントラクトの不一致、セッションの早期シャットダウン、または内部サーバーエラーが原因である可能性があります。

契約の不一致は設計上不可能です。おそらく、通知されていない内部サーバーエラーがあります。

この問題を解決して、サーバーにアイテムをクライアントに送信させるにはどうすればよいですか?

4

1 に答える 1

1

ほとんどのBindingList<>場合、シリアル化に失敗します。より詳細なエラーを取得するには、トレースを有効にする必要があります。それを行う方法については、この投稿を参照してください。

通常、DTO内で複雑なコレクションクラスを使用することはお勧めできません。代わりに配列/リストを検討してくださいBindingList<>。クライアント側でいつでも再構築できます。

于 2012-10-17T23:55:16.260 に答える