Wie sende ich Nachrichten vom server zum client mit SignalR Hubs
Ich bin gerade erst zu erforschen, signalR und ich möchte in der Lage zum senden von Nachrichten vom server an alle clients.
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 ist mein client-Seite
<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>
Diesem funktioniert alles perfekt, ich bin in der Lage, "chat" zwischen 2 verschiedenen Browsern.
Die nächste Sache, die ich tun möchte, initiieren Sie eine Nachricht vom server an alle clients.
Also versuchte ich diese.
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");
}
}
}
Diese scheint nicht zu funktionieren. Der Timer funktioniert, Die "aTimer_Elapsed" event handeler läuft alle 3 Sekunden, aber die "Senden" - Methode auf die chat-hub wird nie ausgeführt.
Irgendwelche Ideen?
InformationsquelleAutor der Frage David Kethel | 2012-08-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, es sollte
statt. Mit Senden Sie den Aufruf der Methode, die der client an den server aufrufen...
InformationsquelleAutor der Antwort eddo
Ja, müssen Sie diese Zeile:
Dies ist jedoch nur die Hälfte Weg und immer noch nicht funktioniert.
In Ihrem Js, die Sie schreiben müssen:
Habe ich den
chat.client
dies wird fügen Sie eine client-side-hub-Methode, die der server aufrufen.InformationsquelleAutor der Antwort 6134548