Я пытаюсь вызвать клиентский метод из действия контроллера веб-API .net.
Я могу это сделать?
Единственный пост, который мне удалось найти, который близок к тому, что я хочу сделать, это этот:
SignalR + отправка сообщения на Хаб через метод действия
Там сообщение отправляется из действия контроллера asp.net MVC с использованием GlobalHost.ConnectionManager.GetHubContext.
Когда я пытаюсь сделать это внутри своего действия веб-API, никаких ошибок не возникает, но метод methodInJavascript никогда не вызывается на стороне клиента.
Public ActionResult MyControllerMethod()
{
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.All.methodInJavascript("hello world");
// or
context.Clients.Group("groupname").methodInJavascript("hello world");
}
Когда я устанавливаю точку останова внутри этого действия, я вижу, что код достигнут и выполняется. Однако на стороне клиента javascript ничего не происходит.
Почему? Неужели веб-API настолько отличается, что это не сработает? Кто-нибудь еще пробовал это и имел успех?
Когда я вызываю "methodInJavascript" из "нутри "моего хаба, он работает отлично. Просто не будет работать при вызове из действия контроллера веб-API .net.
ОБНОВЛЕНИЕ:
После исследования этой проблемы у меня нет решения. Могу только предположить, что в таких примерах чего-то не хватает Сообщения от сервера к клиенту не проходят через SignalR в ASP.NET MVC 4, и это проблемы с вызовом концентратора SignalR из контроллера WebAPI, например, может быть, есть дополнительный шаг настройки для включения вызова из HubContext или чего-то еще. Код, который я изначально разместил здесь, похож на тот, который появляется в этих примерах, и не был продемонстрирован каким-либо образом дефектный. Кто-нибудь может увидеть изъян в коде? Звонок из html работает. Я часто делаю это в своих приложениях и никогда не сталкиваюсь с проблемами. Я никогда не видел вызова из HubContext в работе контроллера API. Ошибок нет. Просто никаких результатов по клиенту.
РЕШЕНО (вроде):
Приведенный выше код действительно работает как при публикации. Однако не работает в среде разработки Visual Studio через localhost. На стороне клиента ошибок нет, но нет результата. Публикация кода на реальном сервере в Интернете действительно работает. Я никогда не думал, что будет разница, поэтому никогда не пробовал. Прикинул, что если он не работает локально, он не будет работать в опубликованном виде. Сейчас он работает вживую, но мне интересно, почему он не работает через localhost в среде разработки. Невозможно протестировать локально с помощью точек останова и т. Д.
Такое ощущение, что это виртуальный каталог сигнального устройства. Что-то другое при локальном запуске и опубликованном. Не знаю, что, но я вижу много сообщений вроде http://www.bitwisejourneys.com/signalr-hosting-in-iis-a-nasty-gotcha/. Читаю сейчас, чтобы узнать, есть ли способ заставить его работать как локально, так и опубликовать.