Ich fange gerade an, signalR zu erkunden, und ich möchte Nachrichten vom Server an alle Clients senden können.Wie sende ich Nachrichten von Server zu Client mit SignalR Hubs
Hier ist mein Hub
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using SignalR;
using SignalR.Hubs;
using SignalR.Hosting.Common;
using SignalR.Hosting.AspNet;
using System.Threading.Tasks;
namespace MvcApplication1
{
public class Chat : Hub
{
public void Send(String message)
{
// Call the addMessage methods on all clients
Clients.addMessage(message);
}
}
}
Hier mein Klient Seite ist
<script type="text/javascript">
$(function() {
//Proxy created on the fly
var chat = $.connection.chat;
// Declare a function on the chat hub so the server can invoke it
chat.addMessage = function (message) {
$("#messages").append("<li>" + message + "</li>");
};
$("#broadcast").click(function() {
// call the chat method on the server
chat.send($("#msg").val());
});
$.connection.hub.start();
});
</script>
}
<input type="text" id="msg" />
<input type="button" id="broadcast" value="broadcast" />
<ul id="messages" class="round">
</ul>
Das alles funktioniert perfekt, ich bin in der Lage zu „chatten“ zwischen zwei verschiedenen Browsern.
Das nächste, was ich tun möchte, ist eine Nachricht vom Server an alle Clients zu initiieren.
Also habe ich das versucht.
using SignalR;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using System;
using System.Web.Routing;
using SignalR;
using SignalR.Hubs;
namespace MvcApplication1
{
// Note: For instructions on enabling IIS6 or IIS7 classic mode,
// visit http://go.microsoft.com/?LinkId=9394801
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
var aTimer = new System.Timers.Timer(1000);
aTimer.Elapsed += aTimer_Elapsed;
aTimer.Interval = 3000;
aTimer.Enabled = true;
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
}
void aTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
var context = GlobalHost.ConnectionManager.GetHubContext<Chat>();
context.Clients.Send("Hello");
}
}
}
Dies scheint nicht zu funktionieren. Der Timer funktioniert, der Ereignishandler "aTimer_Elapsed" wird alle 3 Sekunden ausgeführt, aber die Methode "Send" im Chat-Hub wird nie ausgeführt.
Irgendwelche Ideen?
Was ist, wenn ich in der Lage sein möchte, eine Nachricht an einen bestimmten Client zu senden, wenn die Daten in einer Tabelle in der Datenbank geändert werden, entweder direkt über die DBMS-Konsole oder über eine Desktop-App oder meine Website? –
@MuhammadMamoorKhan Um einen einzelnen Client anzusprechen, müssen Sie die Verbindungs-ID des Clients kennen. Dann können Sie 'GlobalHost.ConnectionManager.GetHubContext() .Clients.Client (connectionId) .addMessage (" etwas hier ");' –
Corey