- - PR -
WEBサービスの戻り値にコレクションクラス
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-05-24 11:42
お世話になっております。
VB.NETでWebサービスとクライアントの通信でコレクションクラスを扱いたいと 考えています。 下記のCollectionBaseを継承したコレクションクラスを含むDLLがあり、 Webサービス側、クライアント側それぞれに参照設定し、クラスを受け渡すメソッド を用意してクライアント側でコレクションクラスのまま取得したいのですが、 Webサービスとクライアントの間ではコレクションクラスではなく、 クラスの配列として扱われます。 クライアント側でこれを同一のクラスを用いてコレクションクラスとして 利用したいと考えているのですが、どなたかよい知恵をお持ちの方はいらっしゃいませんでしょうか? ' 利用したいコレクションクラス Public Class ItemData Private _Name As String Public Property Name() As String Get Return _Name End Get Set(ByVal Value As String) _Name = Value End Set End Property End Class Public Class CollectionData Inherits Collections.CollectionBase Default Property item(ByVal index As Integer) As ItemData Get Return CType(innerlist.Item(index), ItemData) End Get Set(ByVal Value As ItemData) innerlist.Item(index) = Value End Set End Property Sub Add(ByVal Value As ItemData) innerlist.Add(Value) End Sub End Class Webサービス側 WSCollectionData <WebMethod()> _ Public Function Contains() as CollectionData return _CollectionData End Function ↓ CollectionDataクラスのインスタンスを返す クライアント側 WEBサービスからのクラスを受け取る場合、 配列に変換?されてコレクションクラスとはならない →WEBサービスのCollectionDataクラスはWEB参照設定時にWDSLの定義によって"配列"と解釈される このとき、WEBサービスから返されるクラスをクライアント側でコレクションクラスとして 使用したいと考えています。クライアント側はこんな感じで、 ' WEBサービスクラス _Ws = New WSCollectionData.WSCollectionData ' WEBサービスの戻り値取得用 Dim ItemArray() As WSCollectionData.ItemData ' クライアント側 参照設定でのCollectionDataクラス Dim ItemCollection As CollectionDataLibrary.CollectionData としたとき ItemArray = _Ws.Contains はOKなのですが、イメージとしてやりたいのは ItemCollection = _Ws.Contains としたいのですが、これは型が違うためNG。 クラスの型が参照のされ方によって別物と判断されてしまうのでしょう。 WEBサービスからスマートにコレクションクラスを受け取ることは できるのでしょうか? よろしくお願いします。 |
|
投稿日時: 2004-05-24 14:20
CollectionBaseから派生すると、自動的に配列に変わってしまいますね。
いろいろ試してみましたが、わかりませんでした。情報なくてすいません。 本来やりたいことを書いてもらえば、案が出るかもしれません。 |
|
投稿日時: 2004-05-25 11:07
catsさん、レスありがとうございます。
いまサンプルとして考えているのは、WEBサービスから取得したコレクションクラスを リストボックスのDataSourceとしてそのまま使用したいと考えています。 (ここではItemDataクラスのNameプロパティをリスト表示する) またこの方法が取れるなら、応用の範囲は広いかと。 |
|
投稿日時: 2004-05-25 16:28
ListBoxのDisplayMemberにはプロパティしか設定できないのに、
Webサービスのプロクシにはプロパティがなくなってしまうのが 問題ですかね。 うまい方法は思いつきません。 (案1) Webサービスでstring[]を返すようにする (案2) Webサービスの結果を加工する |
|
投稿日時: 2004-05-26 10:07
WEBサービスのWSDL(定義って言っていいのかな?)でも、コレクションクラスは
ArrayOf〜になってしまうので、やっぱり配列として受けることを前提の方法を 検討するしかなさそうですね。 お手数をおかけしました。ありがとうございましたっ! |
1