SignalR — Запуск

Я ищу быстрый и грязный ответ. Я просто теряю сознание, и, глядя на экран уже более 12 часов, я думаю, что меня застрелили.

Я хочу сделать простое приложение SignalR в качестве учебного пособия. Я нашел этот пример, но я продолжаю получать сообщение об ошибке, что билеты не определены. Я нашел еще пару, и продолжаю получать ту же ошибку. Я сравнил образец проекта со своим и не нашел никаких несоответствий.

Кажется, что $.connection.ticketHub или $.connection.chat возвращают неопределенные объекты. Есть ли что-то особенное, что мне нужно сделать с /signalr/hubs? Любые другие мысли очень ценятся.


person bdparrish    schedule 19.01.2012    source источник
comment
‹script src=signalr/hubs type=text/javascript›‹/script› вы должны добавить этот код скрипта на страницу. Поскольку signalR необходимо запустить определение кода скрипта.   -  person sinanakyazici    schedule 19.01.2012
comment
Где твой код? Было бы легче сказать вам, что не так, если бы мы действительно могли видеть это.   -  person rball    schedule 11.05.2012
comment
У меня та же проблема, и я решил этот вопрос: stackoverflow.com/questions/8941595/   -  person Serkan Yılmaz    schedule 17.05.2013


Ответы (5)


Вам нужно добавить /signalr/hubs на страницу, это javascript, динамически сгенерированный SignalR, содержащий заглушки методов для ваших концентраторов и методы на концентраторах.

Итак, если у вас есть .NET-концентратор с именем TestHub, с помощью метода с именем SendMessage(string message) будет сгенерирован javascript, поэтому вы можете из вызова JavaScript: $.connection.testHub.sendMessage("some message to server");

Укажите в браузере URL-адрес: /signalr/hubs, и вы должны получить javascript.

примерно через 150 строк вы увидите заглушку ticketHub:

$.extend(signalR, {
   ticketHub: {
      _: {
          hubName: 'YourNameSpace.TicketHub',
          ignoreMembers: ['someMethod', 'namespace', 'ignoreMembers', 'callbacks'],
          connection: function () { return signalR.hub; }
      },

Вы можете использовать плагин Mozilla Firebug или инструменты разработчика Chrome (значок гаечного ключа->Инструменты->Инструменты разработчика), чтобы увидеть, что отправлено и возвращено с сервера.

РЕДАКТИРОВАТЬ: в SignalR была ошибка, препятствующая правильной генерации /signalr/hubs (она не генерировала заглушки методов). https://github.com/SignalR/SignalR/issues/134

EDIT2: у вас может быть неправильный тег script, попробуйте:

<script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script>

или вы не сослались на сборку SignalR.AspNet.dll. Если я правильно помню, именно эта сборка связывает маршрут с /signalr.

person MatteKarla    schedule 19.01.2012
comment
да, вы правы, я получаю 404 на запрос /signalr/hubs. проблема, на которую вы мне указали, показала исправление, но загрузка файла проекта и его сборка не устранили проблему. - person bdparrish; 20.01.2012
comment
Теперь я получаю это после добавления SignalR.AspNet.dll ... Could not load type 'SignalR.IJsonSerializer' from assembly 'SignalR, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. - person bdparrish; 20.01.2012
comment
Вы добавили сборку SignalR.dll? Это необходимые сборки. - person MatteKarla; 20.01.2012
comment
да, есть ли у NuGet обновленный пакет для SignalR? Он устанавливает только SignalR.dll, а НЕ SignalR.AspNet.dll, поэтому добавление этого приводит к ошибке. Есть ли что-то еще, что NuGet не устанавливает, что мне нужно? Или установка неправильной dll для SignalR.dll? - person bdparrish; 20.01.2012
comment
Попробуйте последнюю версию с GitHub (github.com/SignalR/SignalR). Вам, вероятно, придется изменить ClientId на ConnectionId в своем коде, если вы его используете. - person MatteKarla; 20.01.2012
comment
Где произойдет это изменение? - person bdparrish; 20.01.2012
comment
У концентратора есть контекст, и у этого контекста есть свойство, ранее называвшееся ClientId, которое теперь называется ConectionId (замените Context.ClientId на Context.ConnectionId, если вы его использовали). - person MatteKarla; 24.01.2012
comment
Я не использую это нигде. - person bdparrish; 24.01.2012

Вы используете IE8?

Если да, убедитесь, что вы включили ссылку на сценарий Json2 над сценарием signalR:

<script src="../../Scripts/json2.min.js" type="text/javascript"></script>

(Получить Json2 из Nuget)

person Lee Smith    schedule 23.01.2012

Ответ Ли Смита был прав на деньги. Я получил последнюю версию json2 от nuget, а также убедился, что у вас есть изменения в файле web.config с сайта часто задаваемых вопросов signalR:

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>
person ren    schedule 05.10.2012

Измените тег script на это:

<script type="text/javascript" src='<%= ResolveClientUrl("~/signalr/hubs") %>'></script>
person dhyabi    schedule 14.06.2012

С браузером Visual Studio 2010/MVC 3/Firefox мой Index.cshtml отлично использует SignalR со следующим

<script src="@Url.Content("~/Scripts/jquery-1.8.0.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.signalR-0.5.2.min.js")" type="text/javascript"></script>

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

У меня была другая проблема, но мне не нужно было добавлять @Url.Content в signalr/hubs. Для простоты тестирования у меня также есть файл класса в корне папки Controllers. У меня также есть следующее от Nuget

SignalR / SignalR.Js / SignalR.Server / SignalR.Hosting.AspNet / SignalR.Hosting.Common

(Не то, чтобы вам НУЖНЫ все эти зависимости, но это то, что у меня есть)

Надеюсь, это поможет кому-то...

person Tom Stickel    schedule 15.08.2012