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方法に到達しましたここで、サーバーから受信したデータの処理です。