2012-09-12 4 views
7

このエラーペースト2時間で苦労されて定義されていない - 私の推測ではありますこれは私が間違ってやっているものですが、私はどのようにルーティングすること)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using SignalR.Hubs; 

namespace SingalrTest.Controllers 
{ 
    public class Chat 
    { 
     private readonly static Lazy<Chat> _instance = new Lazy<Chat>(() => new Chat()); 

     public static Chat Instance 
     { get { return _instance.Value; } } 
    } 

    [HubName("chatHub")] 
    public class ChatHub : Hub 
    { 
     private readonly int TimeoutInSeconds = 30; 
     private readonly Chat _chat; 

     public ChatHub() : this(Chat.Instance) { } 

     private ChatHub(Chat chat) 
     { 
      this._chat = chat; 
     } 

     public void Join(string channelName) 
     { 
      System.Diagnostics.Debug.WriteLine("Someone joined " + channelName); 
     } 
    } 
} 

そして最後に

が..

を_Layout.cs.html可能性のあるすべてのそれを置く場所のドキュメントやを見つけることができません
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8" /> 
     <title>@ViewBag.Title - My ASP.NET MVC Application</title> 
     <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" /> 
     <meta name="viewport" content="width=device-width" /> 

     @Styles.Render("~/Content/css") 
     @Scripts.Render("~/bundles/modernizr") 
     @Scripts.Render("~/Scripts/jquery-1.8.1.js") 
     @Scripts.Render("~/Scripts/jquery.signalR-0.5.3.js") 
     @Scripts.Render("~/signalr/hubs") 

     <script type="text/javascript"> 
      $(document).ready(function() { 
       // var chatHubClient = jQuery.connection.chatHub; 
       var chatHubClient = $.connection.chatHub; 

       $.connection.chatHub.start(function() { 
        chatHubClient.join('TEST'); 
       }); 
      }); 
     </script> 
    </head> 
    <body> 
    ... 
    </body> 
</html> 

私が/ signalr/hubsにアクセスすると、ソースが正しく生成されていることがわかります。だから私は何が恋しいの?

+0

私はこの同じ問題を抱えています。何らかの理由で$ .readyイベントが発生したときに$ .connectionが定義されていません。 準備完了イベントではなく、コードをインラインで実行することで問題を解決しました...なぜそれが消えているのかわかりません。 –

答えて

0

thisによると、バージョン0.5.3のために、あなたは接続構文を変更する必要があります。

var connection = $.hubConnection(); 

または直接トラフィックをセカンダリサーバには

var connection = $.hubConnection("http://localhost:58416/"); 

ハブに接続します

var hub = connection.createProxy('your_hub_name'); 

また、メッセージを送受信するときにいくつかの変更があります

希望あなたが移動した可能性があり

8

このヘルプ...ここ

しかし、ソリューションです。

あなたはすべてのスクリプトを正しい順序でheadタグに入れています。しかし、Visual Studioテンプレートの_Layout.cshtmlには、bodyタグの最後に次の行があります。

@Scripts.Render("~/bundles/jquery") 
@RenderSection("scripts", required: false) 

このバンドルにはjQueryライブラリがあり、ロード時に$オブジェクトを上書きします。だから、SignalRがこの設定を行ったときの「もの」はすべて上書きされ、アクセスできない。

あなたのページで次のように使いましょう。

@section scripts { 
    @* Load your scripts here. (and remove jQuery, coz it's already loaded) *@ 
} 

これが役に立ちます。

+0

素晴らしい、ありがとうございます。 –

+0

jQueryはロードされても正しくバンドルされますか?私はむしろbundlelerにバンドルの一部としてjQueryをロードさせてから、signalRを再実行させたいと思います。 –

+0

はい。 SignalRをロードするだけです。 jQueryの後に必ずロードしてください。 (スクリプトセクションは、jQueryをロードした後に実行されます。のスクリプトは、デフォルト設定で前に実行されます)。 – Madushan

関連する問題

 関連する問題