Мы используем библиотеку SignalR в нашем веб-приложении ASP.NET. Код выглядит следующим образом:Контактор SignalR на IIS
Сервер:
[HubName("ticketsCounterHub")]
public class MassivePrintHub : Hub
{
public void PostTicketsCount(long count)
{
Clients.All.Send(count);
}
}
public class HubFactory
{
private HubFactory() {}
public static readonly HubFactory Current = new HubFactory();
public IHubProxy GetMassivePrintHubProxy()
{
var hubConnection = new HubConnection(ConfigUtils.GetRequiredSettingValue("adminPath"));
var hubProxy = hubConnection.CreateHubProxy("ticketsCounterHub");
hubConnection.Start().Wait();
return hubProxy;
}
}
клиента (JavaScript):
MassivePrintApp.controller("ListController", function ($scope, Dates) {
var hubManager = (function() {
var massivePrintHub = $.connection.ticketsCounterHub;
$.connection.hub.start();
return { massivePrintHub: massivePrintHub };
}());
hubManager.massivePrintHub.client.Send = function (ticketsCount) {
$scope.action.Quantity = ticketsCount;
$scope.$digest();
};
});
ключевая часть кода в MVC контроллер:
public FileResult PrintAction(int actionId, int count, DateTime actionDate, bool isThermo=false)
{
var ticketsCount = _ticketService.GetTicketsInStatusCount(actionId, actionDate, TicketStatusEnum.ToPrint);
HubFactory.Current.GetMassivePrintHubProxy().Invoke("PostTicketsCount", ticketsCount);
var stream = new MemoryStream();
xmlResponse.Save(stream);
stream.Flush();
stream.Position = 0;
return File(stream,ContentTypeEnum.XML.ToString(),String.Format("массовая {0} мероприятия {1} {2}шт.xml", isThermo?"термопечать":"печать", action.Artist,count));
}
, как вы можем видеть, у нас есть эта строка:
HubFactory.Current.GetMassivePrintHubProxy().Invoke("PostTicketsCount", ticketsCount);
И это вызывает проблему, то есть всякий раз, когда мы называем это, еще один экземпляр хаба был добавлен в раздел «Запросы» в IIS.
Я понимаю, что мы уже начали хаб в JavaScript-коде, но я не уверен, как использовать существующее соединение или как избавиться от HubFactory или удалить созданный экземпляр хаба.
И я не понимаю, почему хаб висит на IIS.
Является ли класс концентратора в другом приложении в качестве вашего контроллера MVC? Если нет, то вместо создания hubproxy вы можете вызвать контекст концентратора, как здесь: http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server#callfromoutsidehub – DDan
Контроллер MVC помещается в зависимый проект, который использует основное приложение ASP.NET. Я уже пытался использовать контекст-концентратор таким образом: IHubContext context = GlobalHost.ConnectionManager.GetHubContext(); context.Clients.All.Send (ticketsCount); Но это не работает. Может, я сделал что-то не так. –
tesicg
Хаб находится в другом проекте. – tesicg