У меня есть приложение asp.net mvc 4, которое использует SignalR.SignalR OnConnected вызывается несколько раз
Когда пользователь подключен, я хочу уведомить каждого об этом (на данный момент отправить на «все» только для его проверки). В моем CLAS Hub у меня есть это:
public override System.Threading.Tasks.Task OnConnected()
{
NotifyAllOfUserLogin();
return base.OnConnected();
}
В _layout.cshtml, у меня есть это:
<script type="text/javascript">
$(document).ready(function() {
var proxy = $.connection.messagehub;
proxy.client.messageAll = function (message) {
$('#messages').prepend('<p style=\'white-space:pre;\'>' + message + '</p><br />');
};
$("#btnSubmitMessage").click(function() {
proxy.server.messageAll($("#txtMessage").val());
$("#txtMessage").val('');
});
$.connection.hub.start();
});
</script>
Хотя это работает, я думаю, что пишу это в MasterPage является ошибкой, так как ступица соединение будет повторно инициализировано для каждой страницы, наследующей мастер, поэтому OnConnected будет называться много раз.
Как я должен правильно разобраться, вызывая OnConnect только тогда, когда пользователь входит в приложение, а onDisconnected, когда пользователь выходит из системы?
Так что на самом деле нормально иметь $ .connection.hub.start(); вызванный в masterpage, потому что все управляется через идентификатор соединения? спасибо, это начинает иметь смысл. –
Да, это нормально. Все зависит от того, как вы хотите обрабатывать соединения с концентратором SignalR. Просто имейте в виду, что каждая страница в вашем приложении приведет к подключению/отключению на странице. – SeanPrice
Я также заметил связь/разъединение на каждой странице - очевидно, потому что я делаю все это на главной странице, но если вы имеете в виду, что я не должен беспокоиться об этом, так как это не проблема, тогда нормально –