【问题标题】:SignalR Hub not executing the specified javascriptSignalR Hub 未执行指定的 javascript
【发布时间】:2011-12-20 14:04:01
【问题描述】:

我在 ASP.Net Web 应用程序项目中使用 SignalR,但遇到了问题。我的目标是在站点的管理方面进行任何更改,以使某些 GridView 刷新。我计划通过发送信号来运行一些 javascript,从而刷新包含 GridViews 的更新面板。

现在的问题是我无法获取我的集线器尝试调用以在客户端中执行的任何代码。我在 jquery.SignalR.js 文件中的 FireBug 中收到以下错误,但我不确定如何继续修复它:

Firefox can't establish a connection to the server at ws://localhost:40068/signalr?data=[]&transport=webSockets&clientId=92e4f7b9-0118-4fd9-bb55-5f22338d6162.

(function(n,t){"use strict";if(typeof ...on=n.signalR=i})(window.jQuery,window)

在它抛出这个错误之后,它看起来仍然在建立连接,但是没有执行通过集线器发送的 javascript

我在我的网站中设置了以下中心:

namespace testProject
{
    public class statusChanges : Hub
    {
        public void ServerChange()
        {
            Clients.serverChange();

        }
    }
}

我在管理部分的按钮单击事件中有以下代码。调试显示此代码正在由服务器运行:

var clients = Hub.GetClients<statusChanges>();
clients.serverChange();

最后,我的页面中有这段代码,试图在收到信号以确认它正在工作时启动警报。

<script type="text/javascript">
    $(function () {
        var statusChange = $.connection.statusChanges;
        statusChange.serverChange = function () {
            alert(8);
        };
        $.connection.hub.start();
    });
</script>

有没有人知道为什么这不会运行或 FireBug 错误意味着什么?

【问题讨论】:

  • 我有点困惑,serverChange javascript 函数是否与导致回发的按钮位于同一页面上?您是否使用浏览器的两个实例进行测试?正如您正确指出的那样,萤火虫错误不是问题,无论如何都使用长轮询而不是网络套接字afaik来设置连接。
  • 有两个不同的页面;导致事件触发的管理员和应该收到警报的查看器。我在两个不同的浏览器中查看它。

标签: c# javascript jquery asp.net signalr


【解决方案1】:

firebug 中的错误是预期的。这是 websocket 连接失败,不用担心,因为 SignalR 会退回到长轮询。您在服务器端有一个与客户端事件同名的方法。这行不通。

你想要这样的东西:

public Administration : Hub {
}

事件处理程序:

var clients = Hub.GetClients<Administration>();
clients.serverChange();

Javascript:

<script type="text/javascript">
    $(function () {
        var administration= $.connection.administration;
        administration.serverChange = function () {
            alert(8);
        };
        $.connection.hub.start();
    });
</script>

【讨论】:

  • HttpContext 行实际上只是为了测试它是否正在执行该功能。我意识到这是垃圾,并打算把它拿出来;我只是忘了在发布我的代码之前把它拿出来。我会尝试你的答案。如果我以这种方式执行我的 javascript,看起来我根本不需要集线器中的任何东西?
  • 是的,在这种情况下,您只需要集线器生成客户端代理 ($.connection.{hubname})。
  • 我目前在我的本地机器上遇到了同样的问题(即使 SignalR 仍然可以解决该错误)。 var clients = Hub.GetClients();客户端.serverChange();你的例子的一部分 - 这是哪里?
  • 我正在使用与文件上传相同类型的脚本,该文件实际上是从服务器上传到另一台服务器。所以只是服务器事件。并且似乎以同样的方式失败。客户端无法看到进度条在移动。它使用 serverChange 方法根据服务器进度移动。长轮询还有多少时间?
猜你喜欢
  • 2013-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多