2012-04-06 9 views
3

私はMVC3とsignalrで本当に奇妙な問題を抱えています。私は単純なハブを持っています。MVC3のSignalR、タイミングと開始/接続の問題?

[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(メソッド許可されていません)

はその交渉しようとしています何らかの理由でコントローラの下に?

私は登録する必要があり、いくつかの特定のルートはありますか?私が知っていない他の魔法?

UPDATEだから、コンソールで少し遊ん - 最初のバージョンは、実際に私が呼び出すことができるgetStuffを持つオブジェクトを()を作成しないし。しかし、私はstart()を最初に呼び出さなければならないのでシグナルがスローアップします - 存在しません!もう一つは、スタートを()持っているオブジェクトを作成しますが、それはgetStuff()。2 は$ .connection.hub.start代わりをやってみました

UPDATEを持っているdoesntの。これは、コンソールでは動作しているようですが、ページのロードではありません。おそらくハブの呼び出しが行われる前にisntが終了していますか?それは非同期ですか? SignalRの接続を開始

+0

を確かに言うことはできません - それはあなたの第二の場合の 'GetStuff'対大文字と小文字を区別' getStuff'かもしれません。 – vcsjones

+0

いずれも動作せず、ネゴシエートURLは404が存在する(ハブはルートにある)ので、404を返します。 – XeroxDucati

答えて

7

は瞬時ではありません。接続がまだ確立されていないと、connection.GetStuff();に電話すると失敗することがあります。ハブへの接続が確立された後にこのコードを実行する場合は、コールバック関数を使用する必要があります。

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

ハブクイックスタート:SignalRのhttps://github.com/SignalR/SignalR/wiki/QuickStart-Hubs

で掘り下げJavaScriptクライアント: "(@のUrl.Content"

VAR接続= $ .connection(:https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client-Hubs

+0

これも試してみてください。そして、コードでタイマーを設定してください。そのstart()メソッドはこれを遅らせます。正確なコードは同じですが、mvcではなくwebformsで0.2秒で接続します。MVCの下で、3〜5秒..おそらくMVC側でいくつかの競合? – XeroxDucati

0

これを試してみてください〜/ echo ")");

1

あなたは、ハブ部を追加する必要があります。

$.connection.hub.start();