業務アプリ分野にSilverlightを利用するとしたら、バックエンドのデータのやり取りの本命はやはりWCFなんだろうな、ということで、ちょっと試してみました。
続きを読むWCFとの連携を試してみたその(2)
上の続きです。いよいよ、Silverlight側からサービス参照を行って、データを受け取ってみます。
続きを読むWCFとの連携を試してみたその(3) ちょっと追加
ふと思い立って、先ほどのHogeDataのジェネリックなListとか返してみたらどうなんだろう、と思い、実験。
サービス側で、以下のようなメソッドを追加
Public Function GetHogeDataList() As System.Collections.Generic.List(Of HogeData) Implements IService1.GetHogeDataList Dim dataList As New List(Of HogeData) dataList.Add(New HogeData With {.HogeID = 10, .HogeName = "HogeHoge"}) dataList.Add(New HogeData With {.HogeID = 20, .HogeName = "HogeHoge2"}) dataList.Add(New HogeData With {.HogeID = 30, .HogeName = "HogeHoge3"}) Return dataList End Function
これでサービス参照を更新すると、Reference.vbが更新されるので、戻り値がどうなるか確認すると、GetHogeDataListの完了イベントハンドラのEventArgsは以下のようになっている。
<System.Diagnostics.DebuggerStepThroughAttribute()> _ Partial Public Class GetHogeDataListCompletedEventArgs Inherits System.ComponentModel.AsyncCompletedEventArgs Private results() As Object Public Sub New(ByVal results() As Object, ByVal exception As System.Exception, ByVal cancelled As Boolean, ByVal userState As Object) MyBase.New(exception, cancelled, userState) Me.results = results End Sub Public ReadOnly Property Result() As ServiceReference1.HogeData() Get MyBase.RaiseExceptionIfNecessary() Return CType(Me.results(0), ServiceReference1.HogeData()) End Get End Property End Class
つまり、ResultはHogeDataの単純な配列で戻る、と。
試しに、silverlight側のハンドラを以下のようにしてみると、うまく取れている(ちゃんと表示される)。
Private Sub OnCompletedDataHogeList(ByVal sender As Object, ByVal e As ServiceReference1.GetHogeDataListCompletedEventArgs) Dim resData As ServiceReference1.HogeData() = e.Result Me.TextBox1.Text = resData(0)._HogeName Me.TextBox2.Text = resData(1)._HogeName End Sub
つか、今の時点でも、それなりに使い物になりそうな予感。