Ich schlage vor, Sie die Probe Stockticker zum: https://docs.microsoft.com/en-us/aspnet/signalr/overview/getting-started/tutorial-server-broadcast-with-signalr
zeige ich Ihnen hier eine kleine Probe, die Sie an Ihre Anwendung anpassen können. Sie müssen die Nachrichten von Ihrer eigenen Socket-Kommunikation abonnieren und dann können Sie diese Nachrichten an die verbundenen Clients weiterleiten.
Hier ist ein kleines Beispiel, wie Sie die Zeit vom Server zu den Clients senden. (Der interessante Teil ist für Sie die Linie GlobalHost.ConnectionManager.GetHubContext<ClockHub>().Clients.All.sendTime(DateTime.UtcNow.ToString());
Welche dies Sie etwas an alle angeschlossenen Clients senden können
Meine Hauptklasse eine Uhr, die die aktuelle Zeit an alle angeschlossenen Clients sendet..
public class Clock
{
private static Clock _instance;
private Timer timer;
private Clock()
{
timer = new Timer(200);
timer.Elapsed += Timer_Elapsed;
timer.Start();
}
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{ // ---> This is the important part for you: Get hubContext where ever you use it and call method on hub GlobalHost.ConnectionManager.GetHubContext<ClockHub>().Clients.All.sendTime(DateTime.UtcNow.ToString());
GlobalHost.ConnectionManager.GetHubContext<ClockHub>().Clients.Clients()
}
public static Clock Instance
{
get
{
if (_instance == null)
{
_instance = new Clock();
}
return _instance;
}
}
}
}
In dem Anlauf ich eine sigleton Instanz dieser Uhr geschaffen, die, solange die Anwendung lebt laufen.
public class Startup
{
public void Configuration(IAppBuilder app)
{
var inst = Clock.Instance;
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
}
Hub
My:
public class ClockHub : Hub<IClockHub>
{
}
Hub-Schnittstelle, die das Verfahren definiert, das der Server anrufen:
public interface IClockHub
{
void sendTime(string actualTime);
}
Dies ist der Kunde Teil:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
</head>
<body>
<div id="timeLabel" ></div>
<script src="scripts/jquery-1.6.4.min.js"></script>
<script src="scripts/jquery.signalR-2.2.0.js"></script>
<script src="signalr/hubs"></script>
<script>
$(function() { // I use jQuery in this example
var ticker = $.connection.clockHub;
function init() {
}
ticker.client.sendTime = function (h) {
$("#timeLabel").html(h);
}
$.connection.hub.start().done(init);
});
</script>
</body>
</html>
Wie hubcontext injizieren in asp.net Kern 2.x Call SignalR Core Hub method from Controller
Es ist nicht kompatibel mit asp.net Kern! GlobalHost.ConnectionManager.GetHubContext .... existiert zur Zeit nicht im SignalR Core. :/ Ich habe eine andere Lösung mit IConnectionManager Instant von GlobalHost gefunden, aber IConnectionManager ist auch nicht im Signalkern-Framework vorhanden. – Hannes
@Hannes Das hast du in deiner Frage nicht geschrieben. Ich habe meine Antwort aktualisiert – Tester