0

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

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

有没有类似的代码:

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);
    }
}
4

3 回答 3

1

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

创建一个新类并实现 IConnectionIdGenerator。

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

上面的方法只是创建了一个新的 Guid,但您会从您的会员提供商那里返回客户 ID。

然后您需要使用 SignalR dependencyresolver 注册这个新类,因此在 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);
于 2012-05-28T17:01:59.497 回答
0

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

于 2012-05-28T09:00:23.810 回答
0

一种方法是保存一组用户(网站用户),每个用户都与一个连接 ID 配对。然后,您可以使用 SignalR 事件 OnConnected / OnDisconnected 将用户弹出和弹出此列表。

例如

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
}
于 2013-03-19T11:27:29.217 回答