Answered by:
Connection ID not unique on server side

Question
-
User395405350 posted
Connect twice to SignalR hub. Disconnect and connect again. Connection ID is repeated on server side. Javascript client properly shows two distinct connection ids in console.
<body>
<div class="container">
<input type="text" id="status" />
<input type="text" id="message" />
</div>
<!--Script references. -->
<!--Reference the jQuery library. -->
<script src="Scripts/jquery-3.3.1.min.js"></script>
<!--Reference the SignalR library. -->
<script src="Scripts/jquery.signalR-2.2.2.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<!--<script src="/signalr/hubs"></script>-->
<!--Add script to update the page and send messages.-->
<script type="text/javascript">
$(function () {
var _initialize = function () {
// Declare a proxy to reference the hub.
var _hubConnection = $.hubConnection("http://localhost:57903/signalr");
var _hubProxy = _hubConnection.createHubProxy("chatHub");
//_hubProxy.on('updateData', _updateData);
_hubProxy.on('updateDisplayData', _updateData);
_hubConnection.start().done(function () {
//alert('success');
_connectedToSignalR();
}).fail(function (error) {
//alert(error);
_connectionFailure(error)
});var _updateData = function (message) {
$('#message').val(message);
}var _connectedToSignalR = function () {
$('#status').val('connected');
}var _connectionFailure = function (error) {
$('#status').val('disconnected');
}_hubConnection.disconnected(function () {
setTimeout(function () {
_hubConnection.start().done(function () {
//alert('success');
//alert(_hubProxy.connection.id);
console.log('Now connected, connection ID=' + _hubProxy.connection.id);
_connectedToSignalR();
}).fail(function (error) {
//alert(error);
console.log('Could not connect!');
_connectionFailure(error)
});
}, 2000);
});
}_initialize();
});
</script>
</body>public class ChatHub : Hub
{
private readonly ISubscriber _subscriber;public ChatHub(ISubscriber subscriber)
{
_subscriber = subscriber;
}public override async Task OnConnected()
{
try
{
//using (StreamWriter sw = File.AppendText(HostingEnvironment.MapPath(@"~/log.txt")))
//{
// sw.WriteLine("Getting connected" + Context.ConnectionId);
//}_subscriber.Subscribe(Context.ConnectionId);
await base.OnConnected();
}
catch (Exception ex)
{
var message = ex.Message;
throw;
}
}public override async Task OnReconnected()
{
//using (StreamWriter sw = File.AppendText(HostingEnvironment.MapPath(@"~/log.txt")))
//{
// sw.WriteLine("Getting reconnected" + Context.ConnectionId);
//}_subscriber.Resubscribe(Context.ConnectionId);
await base.OnReconnected();
}public override async Task OnDisconnected(bool stop)
{
//using (StreamWriter sw = File.AppendText(HostingEnvironment.MapPath(@"~/log.txt")))
//{
// sw.WriteLine("Getting disconnected " + Context.ConnectionId);
//}_subscriber.Unsubscribe(Context.ConnectionId);
await base.OnDisconnected(stop);
}
}Tuesday, January 23, 2018 6:09 PM
Answers
-
User395405350 posted
My bad - DI was not properly set - working now. Thanks!
- Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
Wednesday, January 24, 2018 3:27 PM
All replies
-
User61956409 posted
Hi Microweb,
Javascript client properly shows two distinct connection ids in console._hubConnection.disconnected(function () {
setTimeout(function () {
_hubConnection.start().done(function () {
//alert('success');
//alert(_hubProxy.connection.id);
console.log('Now connected, connection ID=' + _hubProxy.connection.id);
_connectedToSignalR();
}).fail(function (error) {
//alert(error);
console.log('Could not connect!');
_connectionFailure(error)
});
}, 2000);
});According to your code, we can find that you start a new connection to hub after the client disconnected, they are different connections even though they are established on same browser client, so your browser client show two distinct connection IDs.
You can check this article to know more about connection lifetime events in SignalR.
With Regards,
Fei Han
Wednesday, January 24, 2018 5:48 AM -
User395405350 posted
My bad - DI was not properly set - working now. Thanks!
- Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
Wednesday, January 24, 2018 3:27 PM