【发布时间】:2019-09-12 01:56:17
【问题描述】:
我编写了一个使用 SignalR 的应用程序。我正在将 connectionId 从客户端发送到服务器(控制器)。
使用单个浏览器一切正常(请求将使用 connectionId="conn_1" 发送到服务器)并且 signalR 仅向 conn_1 发送响应,但是当我打开新浏览器并从该客户端发送请求时,先前的连接被处理.这意味着只有一个具有特定 connectionId 的连接保持活动状态。
有什么方法 SignalR 不能用他们想要的数据处理和发送响应?
我是 SignalR 的新手,非常希望得到任何帮助或指导。
Angular SignalRService 开始与服务器的连接
this.hubConnection = new signalR.HubConnectionBuilder()
.withUrl(this.paymentDraftHubUrl)
.build();
return this.hubConnection
.start()
.then(() => this.hubConnectionStatus = 'Connection started')
.catch(err => (this.hubConnectionStatus = 'Error while starting connection: ' + err));
}
将 connectionId 从客户端组件发送到 Api
this.signalRService.startConnection().then((connection) => {
this.connectionId = connection.toString();
//Calling Api
this.getAllTransactionException(
this.connectionId,
this.pageNumber,
this.pageSize
}
C# 中的 MyHub 类
public class PaymentDraftServiceHub : Hub, IPaymentDraftHub
{}
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);
}
【问题讨论】:
-
你的意思是你打开新标签?
-
是的,你是对的。打开新标签
-
这是正常行为,如果您打开另一个浏览器,您可以建立新的连接
标签: c# asp.net-core signalr