Вот что я сделал.
- Я использовал nuget для получения SignalR для моего проекта MVC4.
- Создал класс MyHub в моем контроллере (SignalRTestController.cs)
- В действии указателя попытался транслировать сообщение извне хаба и вернул представление.
- В представлении указаны все сценарии и /signalr/hubs.
Проблема в том, что /signalr/hubs не найден (выбрасывает 404).
Мой проект имеет области и структурирован, как показано:
- MVCProject
- Районы
- ПОДПАПКА
- Контроллер
- SignalRTestController.cs
- Model
- Просмотр
- Index.cshtml
- Контроллер
- ПОДПАПКА
- контроллер
- Model
- Вид
- Сценарии
- Районы
Все сценарии для signalR находятся внутри папки Scripts, а мой SignalRTestController.cs выглядит так:
namespace SignalRTest.Controllers
{
public class SignalRTestController : Controller
{
public ActionResult Index()
{
// Do some work here
// Broadcasting over a Hub from outside of a Hub
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.say("Hello SignalR!");
return View();
}
}
[HubName("MyHub")]
public class MyHub : Hub
{
public void Say(string message)
{
Clients.sendMessage(message);
}
}
}
Любой мой index.cshtml имеет ссылку на все javascripts и /signalr/hubs, как показано ниже: // Другие Javascripts
script type = "text/javascript" src= "/signalr/hubs" /" >
Я думаю, что контроллер в порядке, но я не получаю /signalr/hubs. Он бросает 404, а сообщение в Chrome Console выглядит так:
Ресурс интерпретируется как Script, но передается с текстом типа MIME/html: "http://www.myproject.com/signalr/hubs". Uncaught SyntaxError: Неожиданный токен < концентраторы: 2 Uncaught SignalR: Ошибка загрузки концентраторов. Убедитесь, что ссылка на концентраторы верна, например. script src= '/signalr/hubs' > .
Причина, по которой возвращается Script, так как html возвращает сервер, 404 не найден.
Я не уверен, что случилось. Я думаю, что это может быть проблема маршрутизации. Я не уверен, если нам нужно добавить любую информацию о маршрутизации в проект для /signalr/hubs или я что-то пропустил здесь.
FYI: Когда я создаю новый пустой проект MVC и добавляю signalR и начинаю работать над ним, он отлично работает. Нет необходимости добавлять маршрутизацию.
Кроме того, я использую как маршрутизацию по умолчанию, так и маршрутизацию атрибутов в некоторых местах. Но контроллер SignalRTestController не использует маршрутизацию атрибутов.