How to use generic-hub in SignalR
Ich bin mit SignalR in der version 2.1.2. Ich habe bemerkt, gibt es zwei öffentliche hub Klassen für mich zu nutzen, Hub
und Hub<T>
. Das ehemalige hat eine MSDN-Seite, die zu sein scheint veraltet und die letztere fehlt jeder MSDN-Seite überhaupt. Ich glaube, die MSDN-Dokumentation ist nicht up-to-date mit der neuesten version von SignalR von Nuget (die ich verwende), weil die Quellen dekompiliert mit der Hilfe von ReSharper zeigen beide Klassen Erben von HubBase
Basisklasse. Auf der MSDN-Seite ist Vererbungshierarchie Abschnitt zeigt die Hub
Klasse als Erben von Object
und Umsetzung IHub
und IDisposable
Schnittstellen, jedoch sind die dekompiliert Quellen offenbaren die oben genannten HubBase
Basisklasse, implementieren die IHub
- Schnittstelle, die wiederum implementiert IDisposable
.
Den Unterschied zwischen der non-generic und generic-Variante der Klassen ist, dass die non-generic ist Clients
Eigenschaft gibt IHubCallerConnectionContext<dynamic>
während die generische Variante gibt typisierte IHubCallerConnectionContext<T>
.
Ich würde gerne meine Kunden eingegeben, so dass, wenn ich rufen Sie die client-Methoden aus dem hub, dann hätte ich das richtige Intellisense-Unterstützung und stark typisierte Argumente. Was ich mit zu kämpfen, obwohl, ist, wie lassen sich die Hub weiß, dass mein client-Modell die Methode tatsächlich aufgerufen werden im browser.
Dies ist mein TestModel
Klasse:
public sealed class TestModel
{
public String Name { get; set; }
public void Notify() {}
public void NotifyComplex(TestModel model) {}
}
Mit der non-generic hub, ich würde einfach anrufen .Notify()
oder .Notify(new TestModel() { Name = "sth" })
auf die dynamic
ly gebunden this.Context.Clients.Client(…)
oder this.Context.Caller
, aber mit der generischen Klasse, wenn ich diese leeren Methoden in ähnlicher Weise, der browser wird nicht benachrichtigt, an alle.
Wie verwenden Sie den generischen hub-Klasse so, wie es eigentlich verwendet werden?
- dies könnte nützlich sein: stackoverflow.com/a/21763587/526704
- Ich fürchte, die Frage ist nicht verwandt ist. Ich bin interessiert in der aufrufenden client Methoden vom server, nicht die andere Weise herum, das ist es, was der OP, die Frage ist, tun, und die Methoden, die ich aufrufen möchten, mithilfe von RPC sind nicht generisch, der hub ist, aber, und so sind auch seine Kunden. Ich Schätze den Kommentar, aber.
- ich war mir nicht sicher, ob es hilfreich ist oder nicht, aber ich dachte, ich würde geben was ich gefunden habe. leider habe ich keine andere nützliche Einsicht 🙁
- Keine Sorge, die Antwort wird gefunden schließlich. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich die Antwort gefunden. Die MSDN-Dokumentation ist nicht up-to-Datum als der noch, aber die ASP .NET-Website bietet schöne SignalR-tutorials und einer von Ihnen umfasst die eingegeben Naben:
http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server#stronglytypedhubs
Wie das Beispiel im Artikel zeigt, wenn Sie eine Schnittstelle für den Typ-argument, alles funktioniert und erhalten Sie stark typisierte hub-clients deren Methoden sind korrekt übersetzt RPCs. Hier ist ein Stück code, den ich getestet mit:
OnConnected
- Methode aufgerufen werden, Sie müssen sich registrieren, einen client-Methode zuerst:$.connection.testHub.client.sayHello = function(g) { … }
. Es ist beabsichtigt, dass Kunden, die nicht genannt werden, nicht ausgelöst werdenOn[Connected|Reconnected|Disconnected]
Methoden und kann nur auf das hub-Methoden ähnlich zur request-response-Paradigma.