2013-11-11 4 views
4

Я новичок в SignalR и экспериментирую с настройкой собственной услуги хоста, которую я могу использовать для отправки событий в другие приложения. У меня возникла проблема с вызовом метода для всех клиентов. В приведенном ниже коде _context.Clients.All всегда пуст. Есть идеи?В контекстах концентратора SignalR нет клиентов

Метод испытания:

var server = new SignalRServer(); 
server.Start("http://localhost:8555"); 
var hubConnection = new HubConnection("http://localhost:8555"); 
var proxy = hubConnection.CreateHubProxy("testHub"); 
var executed = false; 
proxy.On("testMethod",() => 
{ 
    executed = true; 
}); 
hubConnection.Start().Wait(); 
var hub = new TestHubContext(GlobalHost.ConnectionManager.GetHubContext<TestHub>()); 
hub.Test(); 
hubConnection.Stop(); 
server.Stop(); 

Само хост-сервер:

public class SignalRServer 
{ 
    private IDisposable _signalR; 

    public void Start(string url) 
    { 
     _signalR = WebApp.Start<SignalRStartup>(url); 
    } 

    public void Stop() 
    { 
     _signalR.Dispose(); 
    } 
} 

public class SignalRStartup 
{ 
    public static IAppBuilder App = null; 

    public void Configuration(IAppBuilder app) 
    { 
     app.UseCors(CorsOptions.AllowAll); 
     app.MapSignalR(); 
    } 
} 

Hub:

public class TestHub : Hub 
{ 

} 

public class TestHubContext 
{ 
    private IHubContext _context; 


    public TestHubContext(IHubContext context) 
    { 
     _context = context; 
    } 


    public void Test() 
    { 
     if (_context != null) 
     { 
      // At this poing _context.Clients.All is always empty 
      _context.Clients.All.testMethod(); 
     } 
    } 
} 
+0

Откуда вы знаете, что пусто? Вы смотрите на все имущество? Скажет ли он: «Больше информации не обнаружено»? – wdavo

+0

И что на самом деле происходит? Метод не вызывается, но вы получаете исключение? – wdavo

+0

Да, это то, что я делаю @wdavo. Это не работает для signalR? –

ответ

1

Я думаю, что ваши/клиентские соединения контекстные хорошо. Без дополнительной информации я предполагаю, что ваша проблема заключается в том, что вы слишком быстро закрываете соединение и сервер после вызова hub.Test()

Прокомментируйте два вызова .Stop() и прикрепите Console.ReadLine туда держите консоль открытой) и посмотрите, что произойдет

Смежные вопросы