2010-11-22 5 views
4

開発者がウェブサービスでList<T>を返すことができないことを知っているので、リストを返すことができるのは、それらを.ToArray()に変換することだけです。私はいくつかを検索しましたが、効果的な答えを得ることはできませんなぜWebサービスを使用してリストを返すことができないのですか?なぜ我々はそれらを変換する必要がありますToArray(); ?ASMX Webサービスでリスト<T>が返されないのはなぜですか?

+3

Webサービスのどのような種類を作成していますか?つまり、どの技術を使用していますか? WCF? ASMX? – Gabe

+0

@Gabe私はasmxでないことを意味しますwcf –

答えて

9

Webサービスは、多くの言語と相互運用可能であると考えられています。ほぼすべての言語に配列がありますが、.NETだけがList<T>の実装を使用しています。

+0

言語標準のために、あなたはArrayを主に使用していますか? –

+0

Webサービスを呼び出すコードが.NETではない可能性があるため、Webサービスでは.NETの種類のみをデフォルトで使用することはできません。 Stefan Pが指摘しているように、WCF(asmxではない)Webサービスでは、クライアントが.NETであることを指定できます。この場合、 'List 'のような.NET固有の型を使用できます。 –

+0

あなたの答えは理にかなっています。あなたは正しいですが、私の意見では、リストが.Netの特定のタイプである場合、リストとasmx Webサービスを返す特定の許可が必要です。 –

2

Webサービスの相互運用性の設定によりますが、int[]のようなオブジェクトは、.NET以外の言語では理解しやすく、List<int>です。 WCFのWebサービスを開発する場合は、返品タイプとしてList<T>がサポートされています。

+0

答えはJoel Muellerの答えです。 –

1

ウェブサービスに記載されているものは「コレクション」です。使用する "コレクション"のタイプを決定するのはクライアントの責任です。クライアントの.Netがサービス参照を追加するときに[詳細]をクリックすると、汎用リストを選択できます。

5

List<T>をASMX Webサービスから返すことを妨げるものは何もありません。なぜあなたはそれを信じるのか分かりません。

XMLスキーマ(WSDLで使用されている)がそれ自体「リスト」を記述することができないことは、あなたが混乱している可能性があります。実際、配列を記述することはできません。一連の反復要素を記述することができます。配列を含むすべてのコレクションは、反復要素のセットとして返されます。

クライアント側では、クライアントはサーバーがList<T>,T[]、またはIEnumerable<T>を返したかどうかを知る方法がなく、気にする必要もありません。

0

明示的に宣言している限り、List(of T)メソッドのタイトルを返す限り、オブジェクトを返すことができます。そうしないと、シリアライズエラーが発生します。

例えば

<WebMethod()> _ 
Public Function Search(ByVal SearchTerm As String) As List(Of 'object here') 
関連する問題