javascript - SignalR 和 WebAPI

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

我想向网页发送通知,该网页是客户端WebAPI。 所以,我有 2 个解决方案,Asp.Net MVC 应用程序和 WebAPI 应用程序。我已将 SignalR nuget 添加到两者中。 WebAPI 部分具有以下代码:

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);
}

然后从我的 Controller 操作调用它:

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: Cannot read property 'client' of undefined

为什么以及如何解决?

最佳答案

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

$(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。

关于javascript - SignalR 和 WebAPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44359165/

相关文章:

c# - 在浏览器中的两个选项卡上打开登录页面并依次登录,在第二个选项卡登录时间得到 "The page isn' t redirecting properly"

javascript - 将其迁移到 Javascript OOP 时出现 TypeError : g. j 未定义(Google map )

javascript - url 上的 AJAX 返回文件或 JSON 响应?

javascript - 需要 JavaScript 来启用或禁用复选框

jquery - Bootstrap 从祖 parent 那里继承网格/CSS 宽度选项

javascript - 根据点击的 TAB 更改 DIV

asp.net - 如何在同一 VM 主机上托管多个带有基于 Asp.Net 的网站的 IIS docker 容器

javascript - <audio> 和 <progress> HTML5 元素的自定义进度条

javascript - 使用 React 和 Bacon 从节点获取 EventStream

javascript - 通过 jQuery 检查是否存在具有相同选项类的任何其他选择标签的更改