Ответ 1
Попробуйте взять [HubName("tenantHub")]
с вашего класса. Моя не работала бы, если бы у меня были там. Также попробуйте помещать концентраторы в папку с именем "Hubs"
в корне вашего проекта.
Я использую Visual Studio 2012 Ultimate RC, SignalR 0.5.1 и JQuery 1.7.2 в приложении MVC4.
Я просмотрел: MVC4 SignalR "signalr/hubs" 501 Не реализована ошибка
Но это не влияет на мою проблему (я использую IIS Express для отладки).
Когда я пытаюсь использовать SignalR, переменная $.connection undefined. Мой код на стороне сервера:
[HubName("tenantHub")]
public class TenantHub : Hub
{
...
void TenantChange(CrudAction action, Tenant tenant)
{
Clients.eventOccurred(action.ToString(), tenant);
}
}
Клиентская сторона:
$(function() { var test = $.connection.tenantHub; });
Клиентская сторона SignalR/hubs
ссылается, и я могу видеть JS-код, он не вызывает никаких ошибок. Но ссылка на $.connection вызывает a Uncaught TypeError: Cannot read property 'tenantHub' of undefined
. Также попытался сделать пример чата по умолчанию, он дает ту же ошибку. Является ли SignalR неподдерживаемым при использовании в VS2012 или я просто глуп?
Попробуйте взять [HubName("tenantHub")]
с вашего класса. Моя не работала бы, если бы у меня были там. Также попробуйте помещать концентраторы в папку с именем "Hubs"
в корне вашего проекта.
Попробуйте удалить BundleConfig.RegisterBundles(BundleTable.Bundles);
из Global.asax.cs и посмотреть, помогает ли это?
Обычно это вызвано загрузкой jQuery дважды. Обычно мы привыкли загружать jQuery в нижний колонтитул. Поскольку signalr жалуется и заставляет вас включать библиотеку jQuery перед сигналом-x.js.
Вы можете включить jQuery перед сигналом-x.js, и вы можете сделать что-то подобное в нижнем колонтитуле, где вы включаете плагин jQuery, чтобы не загружать его дважды:
<script type="text/javascript">
!window.jQuery && document.write('<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"><\/script>');
!window.jQuery && document.write('<script src="/public/js/vendor/jquery-1.9.1.min.js"><\/script>');
</script>
Надеюсь, это поможет.:)
У меня была та же проблема в RTM VS2012.
Проблема заключалась в том, что я сначала добавил signalr в BundleConfig.cs и ожидал, что он просто сработает. Но затем, используя "View Source" в браузере, я заметил, что signalr.js был включен до jquery.js. signalr.js был включен в верхнюю часть страницы, jquery был включен в нижнюю часть страницы.
После некоторого вовлечения BundleConfig signalr.js был включен после jquery.js, и теперь signalr работает как шарм!
Попробуйте поставить RouteTable.Routes.MapHubs();
как самый первый элемент на Application_Start()
в Global.asax.cs
У меня есть пример кода/проекта здесь
Если ни одна из них не работает для вас, убедитесь, что в вашем последнем исходном HTML файле после jQuery появляется не только ссылка на SignalR script, но также и то, что версия соответствует фактическому файлу, который у вас есть в папке с вашими сценариями.
<script src="~/Scripts/jquery.signalR-2.0.2.js"></script>
Например, это соответствует версии 2.0.2 SignalR, если вы обновляете SignalR через пакет, вам придется вручную отредактировать эту строку.
У меня была аналогичная проблема, моя работала с Visual Studio 2010 debug, но не на localhost (IIS7.5 Windows 7). Я обнаружил, что у меня была дополнительная косая черта в определении для "signalr/hubs", я использовал "/signalr/hubs". Я также добавил ссылку JSON 2 js для совместимости браузера. Обратите внимание, что порядок объявления .js важен.
<script src="Scripts/JSON2.js" type="text/javascript"></script>
<script src="http://code.jquery.com/jquery-1.8.2.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.signalR-1.1.2.min.js" type="text/javascript"></script>
<script src="signalr/hubs" type="text/javascript"></script>
<script type="text/javascript">
Чтобы найти эту проблему, я включил ведение журнала следующим образом и просмотрел консоль инструментов dev, чтобы увидеть ошибку при развертывании на localhost.
// Logs errors to the browser dev 'f12' console
$.connection.hub.logging = true;
Надеюсь, это поможет кому-то другому. Сейчас я играю с хром, IE9, 10 на нескольких компьютерах - какая отличная библиотека!
Убедитесь, что у вас нет дублированного имени узла; [HubName ( "tenantHub" )] - это два или более классов-концентраторов, оформленных с тем же именем.
В противоположность Иоанну,
Мне пришлось добавить a/к объявлению signalr/hubs
т.
<script src="signalr/hubs" type="text/javascript"></script>
Стала
<script src="/signalr/hubs" type="text/javascript"></script>