2012-04-06 6 views
3

У меня очень странная проблема с MVC3 и signalr .. У меня простой хаб;SignalR в MVC3, вопросы синхронизации и запуска/соединения?

[HubName("test")] 
public class Test: Hub 
{ 
    public object GetStuff() 
    { 
     return new { dummy = "Test" }; 
    } 
} 

И некоторый код на стороне клиента;

var connection = $.connection.test; 
connection.start(); 
connection.getStuff(); 

Это вызывает ошибку;

TypeError: Объект # не имеет никакого метода 'старт'

Если я вместо этого сделать

var connection = $.connection("test"); 

я получаю другую ошибку;

TypeError: Объект # не имеет метод 'getStuff' JQuery-1.6.4.min.js: 4

POST http://localhost:63021/Controller/test/negotiate 405 (Method Not Allowed)

отметить его попытки договориться под контроллером почему-то?

Есть ли какой-то конкретный маршрут, который мне нужно зарегистрировать? О какой другой магии я не знаю?

UPDATE Так играть немного с консоли - первая версия, на деле создать объект, который имеет getStuff(), который я могу назвать. Но signalr срабатывает, потому что мне нужно сначала вызвать start(), которого не существует! Второй один создает объект, который действительно имеет начало(), но он не имеет getStuff() ..

UPDATE 2 Пробовал делать $ .connection.hub.start вместо этого. Это похоже на работу в консоли, но не на странице onload. Возможно, запуск не завершен до того, как будет сделан вызов концентратора? Это асинхронно?

+0

Не могу сказать точно - но это может быть чувствительно к регистру '' getStuff' против GetStuff' для второго случая. – vcsjones

+0

Ни один из них не работает, и URL-адрес для переговоров возвращает 404, поскольку он не может существовать (хабы находятся в корне). – XeroxDucati

ответ

7

Запуск соединения SignalR не мгновенен. Вы звоните в connection.GetStuff(); может завершиться с ошибкой, если соединение еще не установлено. Если вы хотите, чтобы этот код запускался после установления соединения с концентратором, вы должны использовать функцию обратного вызова.

var connection = $.connection.test; 
$.connection.hub.start(function(){   
    // By convention all exposed hub methods start with lowercase 
    connection.getStuff(); 
}); 

Hub Quickstart: https://github.com/SignalR/SignalR/wiki/QuickStart-Hubs

Углубленный взгляд на SignalR Javascript клиент: https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client-Hubs

+0

Пробовал это тоже - и установите таймер в коде. Его метод start() медленный. Точный точный код, но в веб-формах вместо mvc подключается через 0,2 секунды.В MVC, 3-5 секунд. Возможно, какой-то конфликт на стороне MVC? – XeroxDucati

0

Попробуйте это:

вар соединение = $ .connection ("@ Url.Content (" ~/эхо ")");

 Смежные вопросы

  • Нет связанных вопросов^_^