/ / Como criar grupos no SignalR - asp.net-mvc, signalr

Como criar grupos no SignalR - asp.net-mvc, signalr

Preciso criar um grupo em meu hub signalR, mas a linha Context.ConnectionId é nula:

public class MetricHub : Hub
{
public MetricHub()
{
Groups.Add(Context.ConnectionId, "Syslog");
Groups.Add(Context.ConnectionId, "Heatmap");
}
}

e esta é a classe backgroundTicker que usa a classe MetricHub:

using AutoMapper;
using Makbin.Data;
using Makbin.Web.Model;
using Makbin.Web.ViewModels;
using Microsoft.AspNet.SignalR;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;
using System.Web.Hosting;

namespace Makbin.Web.Hubs
{
public class test
{
public int id { get; set; }
public string name { get; set; }
}
public class BackgroundTicker : IRegisteredObject
{

private readonly MakbinRepository _repository;
private Timer devicesTimer;
private IHubContext hub;



public BackgroundTicker()
{

_repository = new MakbinRepository();

HostingEnvironment.RegisterObject(this);

hub = GlobalHost.ConnectionManager.GetHubContext<MetricHub>();



devicesTimer = new Timer(OnDevicesTimerElapsed, null,
TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(5));
}


private void OnDevicesTimerElapsed(object sender)
{

var result = _repository.Peripherals.Select(x => new { x.PeripheralId, x.Severity });
var finalResult = JsonConvert.SerializeObject(result, Formatting.None,
new JsonSerializerSettings()
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});

hub.Clients.Group("Heatmap").broadcastMessage(DateTime.UtcNow.ToString(), finalResult);
}

public void Stop(bool immediate)
{
//deviceDetailTimer.Dispose();
devicesTimer.Dispose();

HostingEnvironment.UnregisterObject(this);
}
}
}

Meu objetivo com este código é definir grupos antes de enviar qualquer dado. Aqui, defini dois grupos: Syslog, Mapa de calor. Além disso, minha conexão com o cliente é unilateral (servidor para cliente).

Respostas:

0 para resposta № 1

Não se esqueça de mapear o signalR (após configurar a autenticação) no Configuration função:

public void Configuration(IAppBuilder app)
{

// Enable the application to use a cookie to store information for the signed i user
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Home/Index")
});

...


app.MapSignalR();
}

Primeiros passos com signalR:

http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr