Ich muss einige Tests mit SignalR, also habe ich zwei Konsolen-Anwendungen - zunächst als SignalR-Hub (Server) und zweiten SignalR-Client. Ich muss Listen von benutzerdefinierten Objekten, nicht einige primitive Daten wie Strings oder Ganzzahlen übertragen. Ich möchte WCF wegen seiner Komplexität nicht verwenden.Übertragen von IList (Of T) mit SignalR in Desktop-Anwendung
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
Server:
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
Auftraggeber:
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- immer in SelectTasks Verfahren erreicht wird, aber nie in anonymen Sub (t) Methode in Client , wo ist die Verarbeitung von Daten vom Server erhalten.