ASP.NET Signalr-无法将存储在数据库中的消息的列表发送给用户



我的Signalr chathub需要授权才能向另一个用户发送消息。如果用户发送消息,但是如果收件人未连接到集线器,则将保存在数据库中。现在该部分正常工作,我可以将消息保存到收件人收件箱中。

IdentityModel:

public class ApplicationUser : IdentityUser
{ 
    public virtual ICollection<MyMessage> Inbox { get; set; }
    //......
}

如果未连接到集线器,这就是保存消息的方式:

var recipient = UserManager.FindById(id);
if (recipient != null)
{
    if (recipient.Message_Inbox == null)
    {
        recipient.Message_Inbox = new List<MyMessage>();
    }
    recipient.Inbox.Add(new MyMessage() { Id = Guid.NewGuid().ToString(), SentBy = userId, Message = message});
    UserManager.Update(recipient); 
}

然后连接,查询数据库,并向用户发送消息列表。但这不起作用。如果我创建消息的示例列表并发送,我的客户端会收到它,但如果我从服务器发送它。

List<MyMessage> inbox = user.Inbox.ToList();
Clients.Client(Context.ConnectionId).sendInbox(inbox); //doesn't work
//but if I do this
List<MyMessage> list = new List<MyMessage>()
                {
                    new MyMessage() { SentBy = "asdsadd", Message = "First", Id = "sds" },
                    new MyMessage() { SentBy = "asdsadd1", Message = "Second", Id = "sds2" },
                };
 Clients.Client(Context.ConnectionId).sendInbox(list); // IT WORKS

这就是我获得我的Usermanager的方式:

private ApplicationUserManager _userManager;//updated
public ApplicationUserManager UserManager
    {
        get
        {
            return _userManager ?? Context.Request.GetHttpContext().GetOwinContext().GetUserManager<ApplicationUserManager>();
        }
        private set
        {
            _userManager = value;
        }
    }

您将需要更改将消息查询到异步操作的中心方法。这是来源。

通过使用JSON序列化解决了问题。

 string jsonObject = JsonConvert.SerializeObject(inbox);

不确定为什么我的测试列表不需要序列化,但是哦。它有效。

最新更新