SignalR сервер-метод клиента не работает

На основе различных ресурсов signalr код должен работать, но я не могу отправить уведомления от сервера клиенту. Вот часть html/javascript:

<script src="/Scripts/jquery-1.6.4.min.js"></script>
<script src="/Scripts/jquery.signalR-2.2.1.min.js"></script>
<script src="/signalr/js"></script>

<script type="text/javascript">
    $(function () {
        var cHub = $.connection.cHub;

        $.connection.hub.logging = true;

        cHub.client.sendMessage = function (content) {
            $("#container-hub").append($("<p />").html(content));
        };

        $.connection.hub.start().done(function() {
            $('[id$=bGo]').click(
                    function() {
                        cHub.server.send('Sync process started');
                    });
        });        
    });
</script>
<div id="container-hub" style="background: red; height: 100px; width: 100%;"></div>

Класс Hub.cs:

using Microsoft.AspNet.SignalR;

namespace CMS.Objects
{
    public class CHub : Hub
    {
        public void Send(string message)
        {
            // Call the broadcastMessage method to update clients.
            Clients.All.sendMessage(message);
        }
    }
}

Класс Startup.cs:

using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(CMS.CStartup))]

namespace CMS
{
    public class CStartup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();            
        }
    }
}

А вот как я называю метод sendMessage метод:

private void ShowMessage(string message)
{       
    var clients = GlobalHost.ConnectionManager.GetHubContext<CHub>().Clients;
    clients.All.sendMessage(message);
}

Когда кнопка bGo нажата сообщение добавляется к container-hub Div, но ничего, когда я звоню sendMessage метод.

РЕДАКТИРОВАТЬ

Некоторые дополнительные выводы; когда я звоню sendMessage изнутри OnConnected Метод это работает:

public override Task OnConnected()
{
    Clients.All.sendMessage("Connection Initialised");
    return base.OnConnected();
}

1 ответ

Решение

Потратив некоторое время на изучение проблемы, я наконец нашел решение. Не уверен на 100%, но я думаю, что проблема была с использованием UpdatePanel на странице. завернутый signalR код JavaScript для Sys.Application.add_load вместо использования jQuery's $(function () { и это начало работать.

Я упомянул, что не уверен на 100%, что UpdatePanel с ScriptManager был удален несколько раз, не давая результатов перед публикацией вопроса.

Другие вопросы по тегам