samedi 22 mars 2014

Reference for Signalr/hubs is getting an error


Vote count:

0




I'm trying to use signalr library to create a website in Asp.Net and SignalR is working in web project but not working in website.

When i hit the url of localhost:60891/signalr/hubs,i'm getting this error "An item with the same key has already been added". Here is my code .cs file :-



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using Signal R Chat.Common;

namespace Signal R Chat
{
public class ChatHub : Hub
{
#region Data Members

static List<UserDetail> Connected Users = new List<UserDetail>();
static List<MessageDetail> Current Message = new List<MessageDetail>();

#endregion

#region Methods

public void Connect(string userName)
{
var id = Context.ConnectionId;


if (Connected Users.Count(x => x.ConnectionId == id) == 0)
{
Connected Users.Add(new UserDetail { ConnectionId = id, UserName = userName });

// send to caller
Clients.Caller.onConnected(id, userName, Connected Users, Current Message);

// send to all except caller client
Clients.All Except(id).on NewUser Connected(id, userName);

}

}

public void Send Message To All(string userName, string message)
{
// store last 100 messages in cache
Add Message inCache(userName, message);

// Broad cast message
Clients.All.messageReceived(userName, message);
}

public void Send Private Message(string to UserId, string message)
{

string from UserId = Context.ConnectionId;

var to User = Connected Users.FirstOrDefault(x => x.ConnectionId == to UserId) ;
var fromUser = Connected Users.FirstOrDefault(x => x.ConnectionId == from UserId);

if (to User != null && fromUser!=null)
{
// send to
Clients.Client(to User Id).send Private Message(from UserId, from User.UserName, message);

// send to caller user
Clients.Caller.send Private Message(to UserId, from User.UserName, message);
}

}

public override System.Threading.Tasks.Task OnDisconnected()
{
var item = Connected Users.FirstOrDefault(x => x.ConnectionId == Context.ConnectionId);
if (item != null)
{
Connected Users.Remove(item);

var id = Context.ConnectionId;
Clients.All.onUserDisconnected(id, item.UserName);

}

return base.OnDisconnected();
}


#endregion

#region private Messages

private void AddMessageinCache(string userName, string message)
{
CurrentMessage.Add(new MessageDetail { UserName = userName, Message = message });

if (CurrentMessage.Count > 100)
CurrentMessage.RemoveAt(0);
}

#endregion
}

}


asked 4 mins ago






Aucun commentaire:

Enregistrer un commentaire