2016-09-23 2 views
0

私はSignalRハブ(サーバー)と2番目のSignalRクライアントとして機能する2つのコンソールアプリケーションを用意しています。私はカスタムオブジェクトのリストを転送する必要がありますが、文字列や整数のようなプリミティブなデータではありません。その複雑さのためにWCFを使いたくない。デスクトップアプリケーションでSignalRを使用してIList(Of T)を転送する

ハブ:

Imports Microsoft.AspNet.SignalR 
Imports Microsoft.AspNet.SignalR.Hubs 
Imports DataContract 
<HubName("Repository")> 
Public Class RepositoryHub 
    Inherits Hub 
    Public Function SelectTasks() As IList(Of Task) 
    Dim tasks As New List(Of Task) 
    tasks.Add(New Task With {.Id = 1, .Code = "A", .Assignment = "Assignment A"}) 
    tasks.Add(New Task With {.Id = 2, .Code = "B", .Assignment = "Assignment B"}) 
    tasks.Add(New Task With {.Id = 3, .Code = "C", .Assignment = "Assignment C"}) 
    Return tasks 
    End Function 
    Public Overrides Function OnConnected() As Threading.Tasks.Task 
    Console.WriteLine(Context.ConnectionId) 
    Return MyBase.OnConnected() 
    End Function 
End Class 

Public Class Task 
    Public Property Id As Integer 
    Public Property Code As String 
    Public Property Assignment As String 
End Class 

サーバー:

Imports Microsoft.Owin.Hosting 
Module ServerModule 
    Sub Main() 
    Using WebApp.Start(Of OwinConfiguration)("http://localhost:8080") 
     Console.ReadLine() 
    End Using 
    End Sub 
End Module 

Public Class OwinConfiguration 
    Public Sub Configuration(app As IAppBuilder) 
    app.UseCors(CorsOptions.AllowAll) 
    app.MapSignalR() 
    End Sub 
End Class 

クライアント:

Imports Microsoft.AspNet.SignalR.Client 
Imports DataContract 
Module ClientModule 
    Sub Main() 
    Dim repositoryHub As IHubProxy 
    Dim connection As New HubConnection("http://localhost:8080") 
    repositoryHub = connection.CreateHubProxy("Repository") 
    repositoryHub.On(Of IList(Of Task))("SelectTasks", Sub(t) 
                 Console.WriteLine(t.Count) 
                 End Sub) 
    connection.Start().Wait() 
    repositoryHub.Invoke(Of IList(Of Task))("SelectTasks").Wait() 
    Console.ReadLine() 
    End Sub 
End Module 

ブレークポイントは常に決してクライアントで匿名サブ(T)メソッドでは、SelectTasks方法に到達しましたここで、サーバーから受信したデータの処理です。

答えて

0

SignalRの使用には誤解がありました。クライアントは次のようになります。

Imports Microsoft.AspNet.SignalR.Client 
Imports DataContract 
Module ClientModule 
    Sub Main() 
    Dim repositoryHub As IHubProxy 
    Dim connection As New HubConnection("http://localhost:8080") 
    repositoryHub = connection.CreateHubProxy("Repository") 
    connection.Start().Wait() 
    Dim tasks = repositoryHub.Invoke(Of IList(Of Task))("SelectTasks") 
    tasks.Wait() 
    Console.WriteLine(tasks.Result.Count) 
    Console.ReadLine() 
    End Sub 
End Module 
関連する問題