SignalR和WebAPI

时间:2017-06-04 21:55:43

标签: javascript jquery asp.net asp.net-mvc signalr

我想向网页发送通知,这是一个客户WebAPI。 所以,我有2个解决方案,Asp.Net MVC应用程序和WebAPI应用程序。我已向两者添加了SignalR nugetWebAPI部分包含以下代码:

public class ProgressHub : Hub
{
    public void Notification(string message)
    {
        Clients.Caller.onProgressNotification(message);
    }
}


private void SendMessage(string message)
{
    var context = Microsoft.AspNet.SignalR
        .GlobalHost.ConnectionManager.GetHubContext<Hubs.ProgressHub>();
    context.Clients.All.onProgressNotification(message);
}

然后从我的控制器中调用它:

public async Task<IHttpActionResult> ZonalPost()
{
    SendMessage("Start");
    // my long operation
    SendMessage("Scan complete");
    // my long operation
    SendMessage("Convert complete");
    // my long operation

在我的网络应用程序(客户端部分)中:

<script src="~/Scripts/jquery.signalR-2.2.2.min.js"></script>
<script src="~/signalr/hubs"></script>
<script>
    $(function () {
        var progress = $.connection.progressHub;

        progress.client.onProgressNotification = function (message) {
            console.log(message);
        };
    });

但我收到了错误

  

430 Uncaught TypeError:无法读取未定义的属性“client”

为什么以及如何解决?

1 个答案:

答案 0 :(得分:0)

您可能需要使用以下内容:

$(function () {
    $.connection.hub.url = '<yourbackendurl>';
    var connection = $.hubConnection();
    var progress = connection.createHubProxy('progressHub');
    progress.on('onProgressNotification', function(message) {
        console.log(message);
    });
    connection.start()
        .done(function(){ console.log('Now connected, connection ID=' + connection.id); })
        .fail(function(){ console.log('Could not connect'); });
});

请参阅using SignalR without the generated proxy上的文档。请注意,如果要连接到其他服务器,还需要指定服务器URL。