我的連接無法啓動。 此代碼在1.x中工作,但在版本2中不起作用。SignalR Javascript客戶端:無法啓動連接
SignalR似乎試圖連接,但沒有成功。 集線器方法永遠不會被調用。
附加發送圖像與SignalR調試。
的Javascript:
<script type="text/javascript">
$.connection.hub.logging = true;
var options = { transport: ['webSockets', 'longPolling'] };
$(function() {
var userHub = $.connection.userHub;
//Iniciar connecção
window.hubReady = $.connection.hub.start(options);
window.hubReady.done(function() {
userHub.server.ini();
});
userHub.client.iniDone = function (connectionId) {
console.log(connectionId);
};
$.connection.hub.connectionSlow(function() {
console.log('slow connection...');
});
window.hubReady.fail(function(error) {
console.log(error);
});
$.connection.hub.disconnected(function() {
setTimeout(function() {
$.connection.hub.start();
}, 2000);
});
});
</script>
樞紐:
[HubName("userHub")]
public class UserHub : Hub
{
public void Ini()
{
Clients.Client(Context.ConnectionId).iniDone(string.Format("Conectado com o id: {0}", Context.ConnectionId));
}
public override Task OnConnected()
{
var connectionId = Context.ConnectionId;
var email = string.IsNullOrWhiteSpace(Context.User.Identity.Name) ? Context.Headers["email"] : Context.User.Identity.Name;
if (email != null && connectionId != null)
UserData.GetInstance(email).ConnectionsIds.Add(connectionId);
return base.OnConnected();
}
public override Task OnDisconnected()
{
var connectionId = Context.ConnectionId;
var email = string.IsNullOrWhiteSpace(Context.User.Identity.Name) ? Context.Headers["email"] : Context.User.Identity.Name;
if (email != null && connectionId != null)
UserData.GetInstance(email).ConnectionsIds.Remove(connectionId);
return base.OnDisconnected();
}
}
調試:
編輯:
我發現了這個問題!我的Singleton的GetInstance方法有問題。
public static UserData GetInstance(string username)
{
if (_sharedUsers == null)
lock (_lockCreate)
_sharedUsers = new Dictionary<string, UserData>();
if (!_sharedUsers.ContainsKey(username))
lock (_lockAdd)
_sharedUsers.Add(username, new UserData(username));
return _sharedUsers[username];
}
的方法停止總是在這裏:鎖(_lockAdd)
我要保存所有的用戶connectionsIds任何想法?
謝謝
所以在中心服務器上,你看不到「OnConnected」被調用?還是僅僅是「Ini」沒有被召喚? –
您列出的調試圖像還顯示所有連接到服務器的嘗試超時。你可以在'http:// localhost:38219'上確認服務器正在運行嗎? –
調用了OnConnected和OnDisconnected。 Ini()不叫 – rmlm