WCF データ コントラクトで使用するのに最適なリスト/コレクションの種類はどれですか?
-
09-09-2019 - |
質問
WCF データ コントラクトを定義する場合、コレクション/リストにはどの型を使用する必要がありますか?
- それは象徴であるべきですu003CT>、イリストu003CT>、t []または...?
- インターフェイス型と具象型を使用する必要がありますか?
- どのようなトレードオフを考慮する必要がありますか?
解決
注記:からこれに答えています クライアントの 視点 - つまりの /collectionType:<type>
スイッチをつける svcutil.exe
(IDE でも利用可能です)。
個人的にはシンプルにして使うことが多いです List<T>
. 。大量のデータバインディングを行う場合は、 BindingList<T>
オプションかもしれませんが、オブジェクトのプロパティの場合、通常は過剰です。配列は生活を非常に困難にします...それらを避けてください;-p
.NET 3.5 では、次の拡張メソッドのおかげで、各コレクション型で利用できる機能が曖昧になることに注意してください。 Enumerable
.
通常は、 Collection<T>
これは、コレクションをサブクラス化して、 virtual
拡張ポイント。これは WCF では実際にはオプションではありません。
すでに述べたように、使用すると IList<T>
生成されたクラスはコレクションを作成できないため、アセンブリ共有を使用しない限り、etc はオプションではありません。
他のヒント
シリアライザーはインターフェイス タイプのプロパティを処理できないため、datacontract でインターフェイス タイプを使用することはできません。
具体的なタイプを使用できます。MyClass[] またはリスト
インターフェイス型を使用できないという事実を除けば、どのコレクション型を使用するかは実際には問題ではありません。サービスのクライアントがそれらを目にすることはありません。
Web サービスは、WSDL または mex の観点からクライアントにサービスの説明を提供することに注意してください。WSDL の場合、クライアントは送受信されるメッセージを記述した XML スキーマを受け取ります。コレクションの場合、クライアントには、maxOccurs="1" の要素ではなく、maxOccurs="unbounded" の要素が表示されます。クライアントはこれを配列、リスト、またはその他のものとして解釈できます。サービスからどのコレクションを返すかに関係なく、クライアントは maxOccurs="unbounded" を認識し、必要に応じて解釈します。
例外は、ある種の辞書を返す場合ですが、それがどのように機能するかはわかりません。