如何向客户端发送带有signalr的消息?

时间:2012-05-27 16:20:27

标签: signalr

我想将signalR用于我的clint浏览器网站,以便在添加新订单时可以从服务器接收消息。所以我希望它对未被任何浏览器触发的服务器端事件做出反应。

网站上有多个用户。当他在服务器上为他订购新订单时,应通知用户。我如何仅通知特定用户,并通过添加用户的方法执行此操作?

是否有任何代码:

var chat=new Chat();
chat.Send("hihi");

放在AddOrder方法中,带

public class Chat : Hub
{
    public void Send(string message)
    {
        // Call the addMessage method on all clients     
        Clients.refresh(message);
    }
}

3 个答案:

答案 0 :(得分:1)

您可以覆盖默认客户端ID(用于标识用户浏览器窗口)并替换为您自己的ID。您的客户ID将来自您的会员提供商。

创建一个新类并实现IConnectionIdGenerator。

public class UserIdClientIdFactory : IConnectionIdGenerator
{
    public string GenerateConnectionId(IRequest request)
    {
        return Guid.NewGuid().ToString();
    }
}

上述方法只会创建一个新的Guid,但您会从会员提供商处返回客户ID。

然后,您需要使用SignalR依赖性解析器注册此新类,因此在global.asax文件的Application_Start方法中添加以下行

  

GlobalHost.DependencyResolver.Register(typeof运算(IConnectionIdGenerator),   ()=> new UserIdClientIdFactory());

当下新订单时,您将获得特定客户并向其广播消息,例如:

    //clientId matches the user id from you membership provider.

    var clients = GlobalHost.ConnectionManager.GetHubContext().Clients;
    clients[clientId].yourClientSideCallBackMethodGoesHere(someValue);

我做了一个关于类似事情的简短博客,可能对你有帮助。 Adding real time statistics

答案 1 :(得分:0)

您必须为所有已关联的用户存储Context.ConnectionId,将其与您的网站用户绑定,然后使用Clients[connectionId].addMessage(data);

答案 2 :(得分:0)

您可以执行此操作的一种方法是保存每个与连接ID配对的用户(网站用户)集合。然后,您可以使用SignalConne事件OnConnected / OnDisconnected将用户弹出和导出此列表。

E.g。

public override Task OnConnected()
{
     // Add users here with Context.ConnectionId
}

public override Task OnDisconnected()
{
     // Remove users from collection here by identifying them with Context.ConnectionId
}
相关问题