Das SignalR-Ereignis tritt zeitweise auf, wenn es auf einem Server bereitgestellt wird
Bei lokaler Ausführung über VS - IIS Express funktioniert alles zu 100%.
Wenn ich dann auf einem Webserver veröffentliche (im Netzwerk oder online), wird ein Ereignis für "OnConnected" nicht mehr ausgelöst, aber nicht immer. Wenn ich es aktualisiere, kann es dann feuern oder es kann nicht.
Das problematische Ereignis ist ResetTimer (siehe unten, Beispielcode).
Ich habe mich angemeldet und die Konsole zeigt keine Fehler an.
Ich benutze signalr 1.0.1
<script type="text/javascript">
var timerTime, setIntervalInstance;
$(function () {
$('#rollresults').tablesorter({ headers: { 0: { sorter: false }, 1: { sorter: true }, 2: { sorter: false } } });
$.connection.hub.logging = true;
// Proxy created on the fly
var chat = $.connection.brewBattleHub;
// Start the connection
$.connection.hub.qs = '[email protected]["groupName"]';
$.connection.hub.start().done(function () {
$("#broadcast").click(function () {
// Call the chat method on the server
chat.server.roll($("#drinkname").val(), $("#comment").val().substr(0, 40));
$("#rollresults").show('slow');
$("#broadcast").prop("disabled", "disabled");
$("#drinkname").prop("disabled", "disabled");
$("#comment").prop("disabled", "disabled");
});
setIntervalInstance = window.setInterval(timerTick, 1000);
}).fail(function (reason) {
console.log("SignalR connection failed: " + reason);
//chat.server.sendMessage(@Model.UserName + " has Error! (Check logs)");
});
// Declare a function on the chat hub so the server can invoke it
chat.client.addRoll = function (player, roll, drink, comment) {
$("#rollresults").find("tr").eq(1).removeClass('loserrow');
$('#rollresults tbody').append('<tr><td>' + player + '</td>' + '<td>' + roll + '</td>' + '<td>' + drink + '</td>' + '<td>' + comment + '</td></tr>');
$("#rollresults").trigger("update");
$("#rollresults").tablesorter({ sortList: [[1, 0]] });
$("#rollresults").find("tr").eq(1).addClass('loserrow');
};
chat.client.addMessage = function (message) {
$('#messages').append("<div class='message'>" + message + "</div>");
};
chat.client.resetTimer = function () {
timerTime = 30;
};
function timerTick() {
if (timerTime > 0) {
timerTime = timerTime - 1;
$('#timer').html("<div>Starting in: " + timerTime + "</div>");
$("#timerbox").show('slow');
} else {
clearInterval(setIntervalInstance);
$("#broadcast").removeProp("disabled", "disabled");
$('#timerbox').hide('slow');
}
}
});
Relavent Abschnitt der Nabe
public override Task OnConnected()
{
var @group = GetOrCreateGroup();
var user = new ConnectedUser { ConnectionId = Context.ConnectionId, Name = Context.User.Identity.Name };
@group.AddUser(user);
foreach (var connectedUser in @group.ConnectedUsers.Where(u => u != user))
{
Clients.Caller.addMessage(HttpUtility.HtmlEncode(connectedUser.Name + " has connected."));
}
Groups.Add(Context.ConnectionId, @group.Name);
Clients.OthersInGroup(@group.Name).addMessage(HttpUtility.HtmlEncode(user.Name + " has connected."));
Clients.Caller.addMessage(HttpUtility.HtmlEncode("You've connected..."));
ResetTimer(@group.Name);
return base.OnConnected();
}
Group GetOrCreateGroup()
{
var groupName = Context.QueryString["groupName"].ToUpper();
var @group = BattleGroups.FirstOrDefault(g => g.Name.ToUpper() == groupName);
if (group == null)
{
group = new Group { Name = groupName };
BattleGroups.Add(group);
}
return @group;
}
public void ResetTimer(string groupName)
{
Clients.Group(groupName).resetTimer();
}
Konsole
[09:10:01 GMT+0100 (GMT Daylight Time)] SignalR: Negotiating with '/signalr/negotiate? groupName=Public'. jquery.signalR-1.0.1.js:54
[09:10:01 GMT+0100 (GMT Daylight Time)] SignalR: Attempting to connect to SSE endpoint 'http://server:88/signalr/connect?transport=serverSentEvents&connectionToke…onData=%5B%7B%22name%22%3A%22brewbattlehub%22%7D%5D&groupName=Public&tid=4' jquery.signalR-1.0.1.js:54
[09:10:01 GMT+0100 (GMT Daylight Time)] SignalR: EventSource connected jquery.signalR-1.0.1.js:54
[09:10:01 GMT+0100 (GMT Daylight Time)] SignalR: Now monitoring keep alive with a warning timeout of 13333.333333333332 and a connection lost timeout of 20000 jquery.signalR-1.0.1.js:54
[09:10:01 GMT+0100 (GMT Daylight Time)] SignalR: Triggering client hub event 'addMessage' on hub 'brewBattleHub'.
NachtragScheint nicht wirklich 100% lokal zu funktionieren (nur die meiste Zeit), ich denke, es könnte ein Problem sein, das durch Latenz verursacht wird?