Мне нужно провести некоторое тестирование с помощью SignalR, поэтому у меня есть два консольных приложения - сначала они служат в качестве концентратора SignalR (сервер) и второго клиента SignalR. Мне нужно перенести списки пользовательских объектов, а не некоторые примитивные данные, такие как строки или целые числа. Я не хочу использовать WCF из-за его сложности.Передача IList (Of T) с использованием SignalR в настольном приложении
Hub:
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
Breakpoint всегда достигается в методе SelectTasks, но не в методе анонимной Sub (т) в клиенте , где выполняется обработка данных, полученных от сервера.