Ich verwende dieses Tutorial: https://docs.microsoft.com/en-us/aspnet/signalr/overview/older-versions/tutorial-server-broadcast-with-aspnet-signalr, um eine Nachricht von Conext zu senden, die in Singleton gespeichert ist. Ich habe ein paar Probleme.SignalR Version 1.2.2 clientseitige Methode wird nicht aufgerufen, noch wird die Protokollierung der Konsole vorgenommen
Zunächst scheint es keine Probleme bei der Zuweisung des Hubs und beim Herstellen einer Verbindung von der Clientseite zu geben. Das ist mein Code:
$(function() {
var transactionHub = $.connection.TransactPtHub; // the generated client-side hub proxy
transactionHub.client.broadcastDmrUpdate = function (test) {
alert("Yo-Yo Ma!!" + test);
};
console.log('test');
$.connection.hub.logging = true;
$.connection.hub.start()
.done(function() { console.log('Now connected, connection ID=' + $.connection.hub.id); })
.fail(function() { console.log('Could not Connect!'); });
if ($.connection.hub.state === $.signalR.connectionState.disconnected) {
alert("connected");
}
else {
alert("not connected");
}
});
Meine Warnung, "verbunden" wird beim Laden der Seite angezeigt. Die Funktion in diesem Teil des Codes "transactionHub.client.broadcastDmrUpdate = function (test) {..." wird niemals von der Serverseite aufgerufen.
Das ist mein Singleton:
public class TransactPtSingleton
{
private readonly static Lazy<TransactPtSingleton> _instance = new Lazy<TransactPtSingleton>(() => new TransactPtSingleton(GlobalHost.ConnectionManager.GetHubContext<TransactPtHub>().Clients));
private TransactPtSingleton(IHubConnectionContext clients)
{
Clients = clients;
}
private IHubConnectionContext Clients
{
get;
set;
}
public static TransactPtSingleton Instance
{
get
{
return _instance.Value;
}
}
public void BroadcastDmrUpdate(string dmr)
{
Clients.All.broadcastDmrUpdate(dmr);
}
}
und dies ist meine Nabe,
[HubName("TransactPtHub")]
public class TransactPtHub : Hub
{
public void UpdateDailyTransactionTable()
{
}
}
Also, ich, einen Anruf nicht zurück an den Client-Funktion auf Sendung bekommen und obwohl ich Setzen Sie meine Protokollierung auf "True". Ich sehe keine Protokolle in meiner Browserkonsole. Wo fange ich an, Fehler zu beheben? Oder was mache ich falsch? Vielen Dank.
UPDATE: Ich habe meine eigene Diagnose falsch gelesen.
if ($.connection.hub.state === $.signalR.connectionState.disconnected) {
auslöst, so dass die Verbindung aus irgendeinem Grund nicht an den Start. Außerdem werden die Dateien .done und .fail nie eingegeben, und ich bekomme nie Konsolenmeldungen.
Update 2: Die SignalR.js Kämmerei durch sie etwas zu haben scheint, mit dem zu tun,
// Check to see if start is being called prior to page load
// If waitForPageLoad is true we then want to re-direct function call to the window load event
if (!_pageLoaded && config.waitForPageLoad === true) {
connection._.deferredStartHandler = function() {
connection.start(options, callback);
};
_pageWindow.bind("load", connection._.deferredStartHandler);
return deferred.promise();
}
als bei der Rückkehr deferred.promise() es lässt die SignalR.js und kommt zurück zum aufrufenden Skript in der Benutzeroberfläche.
Das JS scheint in Ordnung zu sein. Können Sie einen Haltepunkt setzen und überprüfen, ob Ihre C# -Methode "BroadcastDmrUpdate" aufgerufen wird? –
@FrankModica Ja, ich habe vergessen, das zu erwähnen. Ich hatte den Haltepunkt gesetzt und es trifft diese Methode und ruft auf, Clients.All.broadcastDmrUpdate (dmr); aber dann bekomme ich keine Antwort oder Aktivität von der Client-Seite. – eaglei22
Und Sie haben 'RouteTable.Routes.MapHubs();'? –