在MonoDevelop SignalR ChatHub上运行未定义

时间:2016-05-16 17:54:51

标签: c# mono signalr

我正在尝试使用SignalR设置Monodevelop项目。我通过SignalR安装了Nuget个软件包,所有内容都会编译,但是当我点击页面时,我会一直收到cannot read property of undefined

我无法弄清楚我错过了什么,此时我想我可能会错过配置文件。

这就是我所拥有的:

// 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,但是当我在chrome中预览上下文时,那里什么都没有。这是一个空文件,可能是一切的根本原因。

这是启动文件。我在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服务器上的Visual Studios上运行此代码并且工作正常。我认为这可能是mono的特定问题。我添加了标签。

3 个答案:

答案 0 :(得分:0)

您忘记使用SignalR注册ChatHub类。以下是我通常的做法:

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

    app.MapSignalR();
}

完成此操作后,~/signalr/hubs应包含您需要的内容

答案 1 :(得分:0)

不确定这是否有帮助,但我的未更改HubConfiguation:

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

您可以在此处查看有关我签名的更多信息: https://stackoverflow.com/a/37262337/1322383

答案 2 :(得分:0)

似乎SignalR仅在自托管时有效。

找到了两个链接。我还没有尝试过,但这可能是解决方案。

http://forums.asp.net/t/1924358.aspx?Signalr+on+mono http://social.technet.microsoft.com/wiki/contents/articles/15267.running-signalr-on-mono.aspx