読者です 読者をやめる 読者になる 読者になる

きよくらの備忘録

「三日坊主と呼ばせない!日記」改め。主にソフトウェア開発関連の話題。

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

つか、今の時点でも、それなりに使い物になりそうな予感。