Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Signalr 如何使用信号器向客户端发送消息?_Signalr - Fatal编程技术网

Signalr 如何使用信号器向客户端发送消息?

Signalr 如何使用信号器向客户端发送消息?,signalr,Signalr,我想在我的clint浏览器网站上使用signalR,以便在添加新订单时它可以从服务器接收消息。所以我希望它对任何浏览器都不会触发的服务器端事件做出反应 网站上有多个用户。当服务器上为用户下了新订单时,应通知用户。如何仅通知特定用户,并通过添加用户的方法执行此操作 是否有类似以下代码: var chat=new Chat(); chat.Send("hihi"); 放置在AddOrder方法中,带有 public class Chat : Hub { public void Send(s

我想在我的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);
    }
}

您必须为所有连接的用户存储
上下文.ConnectionId
,将其与您的网站用户绑定,然后使用
客户端[ConnectionId].addMessage(数据)

您可以覆盖默认客户端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(类型为(IConnectionIdGenerator)), ()=>newuseridclientidfactory())

下新订单后,您将获得特定客户并向他们广播消息,例如:

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

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

一种方法是保存一组用户(网站用户),每个用户都与一个连接Id配对。然后,您可以使用Signal events 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
}