Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
C# 具有多个客户端连接的信令器_C#_Asp.net Core_Signalr - Fatal编程技术网

C# 具有多个客户端连接的信令器

C# 具有多个客户端连接的信令器,c#,asp.net-core,signalr,C#,Asp.net Core,Signalr,我已经写了一个应用程序,我正在使用信号器。我正在将connectionId从客户端发送到服务器(控制器)。 单浏览器一切正常(请求将通过connectionId=“conn_1”发送到服务器),signer只向conn_1发送响应,但当我打开新浏览器并从该客户端发送请求时,以前的连接将被解除。这意味着只有一个具有特定connectionId的连接仍然有效 信号员是否有任何方法不能处理并向两者发送所需数据的响应 我是新来的信号员,非常需要任何帮助或指导 角度信号服务启动与服务器的连接 将conne

我已经写了一个应用程序,我正在使用信号器。我正在将connectionId从客户端发送到服务器(控制器)。

单浏览器一切正常(请求将通过connectionId=“conn_1”发送到服务器),signer只向conn_1发送响应,但当我打开新浏览器并从该客户端发送请求时,以前的连接将被解除。这意味着只有一个具有特定connectionId的连接仍然有效

信号员是否有任何方法不能处理并向两者发送所需数据的响应

我是新来的信号员,非常需要任何帮助或指导

角度信号服务启动与服务器的连接

将connectionId从客户端组件发送到Api

C中的MyHub类#

API控制器 使用计时器不断调用存储库以获取新数据

[HttpGet]
[Route("GetCsrTranactions")]
public IActionResult GetCsrTranactions([FromQuery] TransactionExceptionDataRequest queryParams)
{
    TimeManager.Dispose();
    var timerManager = new TimeManager(async () =>
    await _paymentDraftHub.Clients.Clients.Client(queryParams.ConnectionId).SendAsync(SignalRConstants.TransferPaymentDraftServiceData, await _paymentTransactionRepository.GetCsrTranactionsAsync(queryParams)));
    var response = new ResponseMessage { Message = "Accepted", Code = "201" };
    return Ok(response);
}

如果客户端从多个浏览器窗口或选项卡进行连接,则客户端可以有多个具有多个连接ID的连接

根据您提供的代码,我们可以发现您只需将当前活动浏览器选项卡/窗口中SignalR client的连接ID传递给您的控制器,并且在控制器操作中,您使用此代码段
.client(queryParams.ConnectionId).SendAsync()
向特定的客户端发送消息,因此,其他浏览器窗口或选项卡将不会收到该消息

如果您想向具有多个连接的客户端发送消息,则需要将信号器用户映射到连接ID,并保留有关用户到ConnectionID映射的信息,然后可以获取客户端的所有ConnectionID,并向具有多个ConnectionID的客户端发送消息,如下所示

//code logic here 
//to get all connectinIds of a client/user
//from user-to-connectionIds mapping table

await _paymentDraftHub.Clients.Clients(connectionIds_here).SendAsync("method_here",args_here); 

你是说你打开了新的标签?是的,你是对的。打开新选项卡这是正常行为,如果打开另一个浏览器,则可以建立新连接
public class PaymentDraftServiceHub : Hub, IPaymentDraftHub
{}
[HttpGet]
[Route("GetCsrTranactions")]
public IActionResult GetCsrTranactions([FromQuery] TransactionExceptionDataRequest queryParams)
{
    TimeManager.Dispose();
    var timerManager = new TimeManager(async () =>
    await _paymentDraftHub.Clients.Clients.Client(queryParams.ConnectionId).SendAsync(SignalRConstants.TransferPaymentDraftServiceData, await _paymentTransactionRepository.GetCsrTranactionsAsync(queryParams)));
    var response = new ResponseMessage { Message = "Accepted", Code = "201" };
    return Ok(response);
}
//code logic here 
//to get all connectinIds of a client/user
//from user-to-connectionIds mapping table

await _paymentDraftHub.Clients.Clients(connectionIds_here).SendAsync("method_here",args_here);