Я пытаюсь вызвать клиентский метод из действия контроллера .net Web API.
Могу ли я это сделать?
Единственный пост, который я могу найти, который близок к тому, что я ищу, - это:
SignalR + отправка сообщения в концентратор с помощью метода действий
В нем сообщение отправляется из действия контроллера MVC asp.net с использованием 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" из "внутри" моего концентратора, он работает отлично. Просто не будет работать при вызове из действия контроллера .net Web API.
UPDATE:
После изучения этой проблемы у меня нет решения. Я могу только предположить, что в таких примерах что-то не хватает, чтобы сообщения клиентов не проходили через SignalR в ASP.NET MVC 4, и это вызывает концентратор SignalR из проблем контроллера WebAPI, например, возможно, есть дополнительный шаг настройки, позволяющий вызывать из HubContext или что-то еще. Код, который я изначально размещал здесь, похож на тот, который появляется в этих примерах, не был продемонстрирован как-то испорченный. Может ли кто-нибудь увидеть недостатки в коде? Вызов из html работает. Я делаю это широко в своих приложениях и никогда не испытываю проблемы. Я никогда не видел вызова из HubContext в работе контроллера API. Нет ошибок. Просто никаких результатов на клиенте.
РЕШЕННЫЙ (вид):
Код выше действительно работает как при публикации. Однако не работает в среде Visual Studio dev через localhost. Ошибок нет, но результат не заканчивается. Публикация кода, как и реального сервера в Интернете, действительно работает. Я никогда не думал, что будет разница, поэтому я никогда не пробовал. Если он не работает локально, он не будет опубликован. Теперь он работает, но мне интересно, почему он не работает через localhost в среде dev. Не удается проверить локально с точками останова и т.д.
У меня такое чувство, что это виртуальный каталог signalr. Что-то другое при запуске локально и опубликовано. Не уверен, что, но я вижу много сообщений, таких как http://www.bitwisejourneys.com/signalr-hosting-in-iis-a-nasty-gotcha/. Читайте сейчас, чтобы узнать, есть ли способ заставить его работать как локально, так и публично.