Я работаю с проектом сигнализатора с использованием .Net Framework 4.6. И у меня есть базовый контроллер:
public abstract class Base<THub> : ApiController where THub : IHub
{
private static readonly Func<IHubContext> ValueFactory = () => GlobalHost.ConnectionManager.GetHubContext<THub>();
private readonly Lazy<IHubContext> hub = new Lazy<IHubContext>(ValueFactory);
protected IHubContext Hub => hub.Value;
}
ТАК Я создаю свой контроллер уведомлений из базы.
public class NewsController : Base<NotificationHub>{
public async Task<IHttpActionResult> CreateNews(string name){
// connect database
// create news on database
....
Hub.Clients.All.send(name);
}
}
И я подключаю этот концентратор из моего настольного приложения. Я создаю новости, используя действие CreateNews (имя строки), это действие отправляет уведомление с первых нескольких попыток. И затем он не отправляет несколько попыток, а через несколько раз снова отправляет уведомление клиенту.
[HubName("notification")]
public class NotificationHub: Hub
{
private static readonly ConnectionMapping<string> Connections = new ConnectionMapping<string>();
public override Task OnConnected()
{
var name = Context.User.Identity.Name;
Connections.Add(name, Context.ConnectionId);
return base.OnConnected();
}
public override Task OnDisconnected(bool stopCalled)
{
var name = Context.User.Identity.Name;
Connections.Remove(name, Context.ConnectionId);
return base.OnDisconnected(stopCalled);
}
public override Task OnReconnected()
{
var name = Context.User.Identity.Name;
if (!Connections.GetConnections(name).Contains(Context.ConnectionId))
{
Connections.Add(name, Context.ConnectionId);
}
return base.OnReconnected();
}
}
Я установил точки останова в моем настольном клиенте, нет ошибок или сбоев подключения. Это всегда работает. Но уведомления не отправляются все время под названием действие CreateNews (имя строки).
Каковы возможные причины?