2016-08-25 8 views
0
에서 그룹을 만드는 방법

내 signalR 허브에서 그룹을 생성해야하지만 Context.ConnectionId 라인은 null입니다 :는 SignalR

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

이이 MetricHub 클래스 사용 backgroundTicker 클래스입니다 :

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); 
     } 
    } 
} 

이 코드의 목적은 데이터를 보내기 전에 그룹을 정의하는 것입니다. 여기에서는 Syslog, Heatmap이라는 두 그룹을 정의했습니다. 게다가 클라이언트에 대한 연결은 단방향 (클라이언트에서 서버로)입니다.

답변

0

Configuration 함수 (인증 구성 후) signalR을지도하는 것을 잊지 마세요 : signalR와

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(); 
} 

얻기 시작 :

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

+0

나는 어떤 인증 부분이없는 내 프로젝트, 인증을받는 것이 중요합니까? –

+1

필수 항목은 아니지만 중요 라인은'app.MapSignalR(); '입니다. –

+0

@AminMohammadi가이 문제를 해결 했습니까? –