Подтвердить что ты не робот

SignalR: $.connection undefined

Я использую 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 или я просто глуп?

4b9b3361

Ответ 1

Попробуйте взять [HubName("tenantHub")] с вашего класса. Моя не работала бы, если бы у меня были там. Также попробуйте помещать концентраторы в папку с именем "Hubs" в корне вашего проекта.

Ответ 2

Попробуйте удалить BundleConfig.RegisterBundles(BundleTable.Bundles); из Global.asax.cs и посмотреть, помогает ли это?

Ответ 3

Обычно это вызвано загрузкой 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>

Надеюсь, это поможет.:)

Ответ 4

У меня была та же проблема в RTM VS2012.

Проблема заключалась в том, что я сначала добавил signalr в BundleConfig.cs и ожидал, что он просто сработает. Но затем, используя "View Source" в браузере, я заметил, что signalr.js был включен до jquery.js. signalr.js был включен в верхнюю часть страницы, jquery был включен в нижнюю часть страницы.

После некоторого вовлечения BundleConfig signalr.js был включен после jquery.js, и теперь signalr работает как шарм!

Ответ 5

Попробуйте поставить RouteTable.Routes.MapHubs(); как самый первый элемент на Application_Start() в Global.asax.cs

У меня есть пример кода/проекта здесь

Ответ 6

Если ни одна из них не работает для вас, убедитесь, что в вашем последнем исходном HTML файле после jQuery появляется не только ссылка на SignalR script, но также и то, что версия соответствует фактическому файлу, который у вас есть в папке с вашими сценариями.

<script src="~/Scripts/jquery.signalR-2.0.2.js"></script> 

Например, это соответствует версии 2.0.2 SignalR, если вы обновляете SignalR через пакет, вам придется вручную отредактировать эту строку.

Ответ 7

У меня была аналогичная проблема, моя работала с 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 на нескольких компьютерах - какая отличная библиотека!

Ответ 8

Убедитесь, что у вас нет дублированного имени узла; [HubName ( "tenantHub" )] - это два или более классов-концентраторов, оформленных с тем же именем.

Ответ 9

В противоположность Иоанну,

Мне пришлось добавить a/к объявлению signalr/hubs

т.

<script src="signalr/hubs" type="text/javascript"></script>

Стала

<script src="/signalr/hubs" type="text/javascript"></script>