2016-09-23 1 views
0

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.

Antwort

0

Es war Missverständnis in SignalR Nutzung. Client sollte so sein:

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 
Verwandte Themen