Asp.net mvc 4 signer避免在负载客户端重复登录
我正在使用信号机推送通知服务 我创建了一个局部视图。内部局部视图。这是我的客户端代码:Asp.net mvc 4 signer避免在负载客户端重复登录,asp.net-mvc-4,signalr-hub,Asp.net Mvc 4,Signalr Hub,我正在使用信号机推送通知服务 我创建了一个局部视图。内部局部视图。这是我的客户端代码: <script type="text/javascript"> var objHub; $(function () { objHub = $.connection.AnilHub; loadClientMethods(objHub); $.co
<script type="text/javascript">
var objHub;
$(function () {
objHub = $.connection.AnilHub;
loadClientMethods(objHub);
$.connection.hub.start()
.done(function () { objHub.server.connect();
console.log('Now connected, connection ID=' + $.connection.hub.id); }
// at the same time i want to insert into database to set user is online.
objHub.server.login('user1');
)
.fail(function () { console.log('Could not Connect!'); });
function loadClientMethods(objHub) {
objHub.client.getMessages = function (message) {
$('#divMessage').append('<div><p>' + message + '</p></div>');
var height = $('#divMessage')[0].scrollHeight;
$('#divMessage').scrollTop(height);
}
}
</script>
现在我只想避免重新加载登录检查。因为每次我刷新页面时,它都会调用connect方法和hub方法。如何避免重新连接问题。我如何坚持这些事情,即使hub没有处理会话
请建议…在html中,在第一次加载时,创建一个随机id并将其存储在cookie中 在集线器代码中,创建一个arraylist并将这些随机ID与相应的连接ID一起存储
在html中,尝试在每次页面刷新期间从Cookie中读取随机id,如果未找到,则为新连接,如果找到,则使用旧随机id和新连接id连接到集线器。然后,在hub arraylist中,对于这个特定的随机id,将旧的连接id替换为新的连接id。如果数组未声明为静态,则此操作将不起作用。而且它无论如何也不能完全解决这个问题,因为一旦应用程序池被回收,阵列就会丢失,这种情况随时可能发生。大多数情况下都可以,但并不总是这样,不过可能已经足够好了。如果连接和/或信号服务器出现问题,我会使用javascript中的心跳函数重新登录,例如,我可以关闭信号服务器并等待几分钟,然后再打开它,几秒钟后,一切都恢复正常,当然,总的来说,它是有效的,我只是指出,你不能完全避免重新检查登录信息,这是OP中要求的,一般来说,这不是一件小事。
[HubName("MyHub")]
public class MainHub : Hub
{
public void Connect()
{
try
{
string userGroup = "test";
var id = Context.ConnectionId;
Groups.Add(id, userGroup);
Clients.Caller.onConnected(id, userGroup);
}
catch
{
Clients.Caller.NoExistAdmin();
}
}
public void NotifyAllClients(string Message)
{
Clients.Group("test").getMessages(Message);
}
public override Task OnConnected()
{
// Set status online on database
return base.OnConnected();
}
public override Task OnDisconnected(bool stopCalled = false)
{
// set status disconnct in database
return base.OnDisconnected(stopCalled);
}
}
}