2016-05-16 83 views
0

我在嘗試使用Monodevelop設置SignalR項目。我通過Nuget安裝了SignalR軟件包,並且編譯了所有內容,但當我打開我的頁面時,我仍然收到cannot read property of undefined在MonoDevelop上運行SignalR ChatHub未定義

我無法弄清楚我錯過了什麼,在這一點上我想我可能會丟失一個配置文件。

這是我有:

// the view 
@section scripts { 
    <script src="~/Scripts/jquery-2.2.3.min.js"></script> 
    <script src="~/Scripts/jquery.signalR-2.2.0.min.js"></script> 
    <!--Reference the autogenerated SignalR hub script. --> 
    <script src="~/signalr/hubs" type="text/javascript"></script> 
    <!--SignalR script to update the chat page and send messages.--> 
    <script> 
     $(function() { 
      // Reference the auto-generated proxy for the hub. 
      var chat = $.connection.chatHub; 
      // Create a function that the hub can call back to display messages. 

      console.log(chat); 

      chat.client.addNewMessageToPage = function (name, message) { 
       // Add the message to the page. 

       console.log('here'); 

       $('#discussion').append('<li><strong>' + htmlEncode(name) 
        + '</strong>: ' + htmlEncode(message) + '</li>'); 
      }; 
      // Get the user name and store it to prepend to messages. 
      $('#displayname').val(prompt('Enter your name:', '')); 
      // Set initial focus to message input box. 
      $('#message').focus(); 
      // Start the connection. 
      $.connection.hub.start().done(function() { 
       $('#sendmessage').click(function() { 
        // Call the Send method on the hub. 
        chat.server.send($('#displayname').val(), $('#message').val()); 
        // Clear text box and reset focus for next comment. 
        $('#message').val('').focus(); 
       }); 
      }); 
     }); 
     // This optional function html-encodes messages for display in the page. 
     function htmlEncode(value) { 
      var encodedValue = $('<div />').text(value).html(); 
      return encodedValue; 
     } 
    </script> 
} 

似乎~/signalr/hubs沒有404,但是當我預覽鉻的背景下,有什麼都沒有。這是一個空文件,這可能是一切的根本原因。

這是啓動文件。我放了一個斷點configuration方法,它確實打了那個代碼。

using System; 
using Microsoft.Owin; 
using Owin; 

[assembly: OwinStartup(typeof(SignalRChat.Startup))] 
namespace SignalRChat 
{ 
    public class Startup 
    { 
     public Startup() 
     { 
     } 

     public void Configuration (IAppBuilder app) 
     { 
      app.MapSignalR(); 
     } 
    } 
} 

這裏是樞紐:

using System; 
using Microsoft.AspNet.SignalR; 
using Microsoft.AspNet.SignalR.Hubs; 

namespace SignalRChat 
{ 
    [HubName("chatHub")] 
    public class ChatHub : Hub 
    { 
     public void Send (string name, string message) 
     { 
      Clients.All.addNewMessageToPage (name, message); 
     } 

     public ChatHub() 
     { 
     } 
    } 
} 

編輯:運行在視覺工作室這個代碼在IIS服務器上和工作的事情。我認爲這可能是mono的一個特定問題。我加了標籤。

+0

是否使用的是單聲道的版本? ('mono --version') – GTHvidsten

+0

我使用的是'4.2.3'版本 – Rhs

+0

哪個SignalR DLL在您的執行文件夾中? (我必須同時使用'Microsoft.AspNet.SignalR.Core.dll'和'Microsoft.AspNet.SignalR.SystemWeb.dll') – GTHvidsten

回答

0

您忘記了使用SignalR註冊您的ChatHub類。下面是我平時做:

public void Configure(IAppBuilder app) 
{ 
    GlobalHost.DependencyResolver.Register(typeof(ChatHub),() => 
    { 
     ChatHub hub = new ChatHub(); 
     return hub; 
    }); 

    app.MapSignalR(); 
} 

後你這樣做了~/signalr/hubs應該包含你所需要的

+0

你把它放在哪裏? – Rhs

+0

對不起,我應該說得更清楚。我更新了代碼以顯示我放置的位置。 – GTHvidsten

+0

有趣。我不必將我的集線器明確添加到Web服務器。我的理解是,從Hub派生並調用MapSignalR()會做到這一點。但我可以告訴你,我已經工作了2年,並且我不在任何地方將集線器()註冊到我的集線器上,也沒有在任何地方創建實例。 –

0

不知道這是否可以幫助,但我有一個不變的HubConfiguation:

public void Configuration(IAppBuilder app) 
{ 
    HubConfiguration config = new HubConfiguration(); 
    config.EnableJSONP = true; 
    app.MapSignalR(config); 
} 

你可以在這裏看到更多關於我的簽名: https://stackoverflow.com/a/37262337/1322383

+0

感謝您的幫助。不幸的是,這並沒有解決問題。自動生成的'〜/ signalr/hubs'仍然是空白的 – Rhs