javascript - 服务器调用一些(但不是全部)客户端方法

标签 javascript asp.net vb.net signalr

我的 ASP.NET 网站有一个非常基本的 SignalR 配置设置。我可以调用服务器并在所有连接的客户端上调用一些方法。但其他方法似乎不起作用,并且出现以下错误。

500: 'XXX' method could not be resolved.

我认为这可能是服务器和客户端之间的方法名称冲突,但我很难相信这一点。需要注意的一件事是,对于调用带有参数的客户端方法的方法来说,它确实会失败。这是我的代码:

服务器端

<HubName("myHub")>
    Public Class myHub
    Inherits Hub

    Public Sub sendMsg(ByVal message As String, ByVal Optional target As String = "")
        Clients.All.invoke_message(Context.ConnectionId, message)
    End Sub

    Public Sub refresh()
        Clients.All.invoke_refresh()
    End Sub
End Class

客户端

window.myHub = $.connection.myHub;

myHub.client.invoke_refresh = function () {
    // invoked to force the user's page to refresh
    document.location.reload(true);
}

myHub.client.invoke_message = function (clientID, message) {
    // invoked while broadcasting a message
    console.log(clientID + ': ' + message);
};

刷新方法工作正常。新消息返回上述错误。

有什么想法吗?提前致谢。

最佳答案

在 SignalR 中,服务器不知道任何 JS 客户端功能。它仅向客户端发送消息,并且客户端调用给定的函数(如果存在)。

因此,您看到 500 错误(内部服务器错误)这一事实让我相信它与客户端无关。

话虽这么说,我继续用 C# 测试了你的代码,它工作得很好。还做了一个VB.Net项目,终于可以正常运行了。

这是我的 VB.Net 项目的代码:

服务器集线器 (MyHub.vb)

Imports Microsoft.AspNet.SignalR.Hubs

<HubName("myHub")>
Public Class MyHub
    Inherits Hub

    Public Sub sendMsg(ByVal message As String)
        Clients.All.invoke_message(Context.ConnectionId, message)
    End Sub

    Public Sub refresh()
        Clients.All.invoke_refresh()
    End Sub
End Class

客户端代码(default.aspx):

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="default.aspx.vb" Inherits="VBTest._default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <div id="SendMessage">SendMsg</div>
        <div id="Refresh">Refresh</div>
    </div>
    </form>

    <script src="Scripts/jquery-1.6.4.js"></script>
    <script src="Scripts/jquery.signalR-1.0.0-rc1.js"></script>
    <script src="/signalr/hubs"></script>

    <script type="text/javascript">
        window.myHub = $.connection.myHub;

        myHub.client.invoke_refresh = function () {
            // invoked to force the user's page to refresh
            document.location.reload(true);
        }

        myHub.client.invoke_message = function (clientID, message) {
            // invoked while broadcasting a message
            console.log(clientID + ': ' + message);
        };

        $.connection.hub.start().done(function () {
            $("#SendMessage").click(function () {
                window.myHub.server.sendMsg("ELLO");
            });

            $("#Refresh").click(function () {
                window.myHub.server.refresh();
            });
        });
    </script>
</body>
</html>

Global.asax:

Imports System.Web.SessionState
Imports System.Web.Routing
Imports Microsoft.AspNet.SignalR

Public Class Global_asax
    Inherits System.Web.HttpApplication

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        RouteTable.Routes.MapHubs()
    End Sub
End Class

还有我的文件夹结构的 SS: /image/VeljM.jpg

确保删除 App_Start 代码并将其替换为 Global.asax 代码。

我做的不同的一件事是我从源代码中获取了所有 SignalR 代码 (https://github.com/SignalR/SignalR/tree/release)。

希望这有帮助!

关于javascript - 服务器调用一些(但不是全部)客户端方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13768650/

相关文章:

php - 在 PHP 中执行 javascript

javascript - 当有数据库调用时,调用验证 Jscript 函数的正确方法是什么?

asp.net - 如何在没有物理 .ASMX 文件的情况下实现 Web 服务?

mysql - VB.NET:使用变量生成 MySQL 查询

mysql - 如何使用用户输入的文本框作为 MySql 查询,然后在另一个文本框中显示结果?

javascript - ember.js 是否足够稳定,可以在现实世界的项目中使用?

javascript - 在 Angular 中编译 HTML 字符串模板

javascript - 使用 anchor 标记单击更改 ul 列表的事件类

asp.net - 来自 ASP.NET 的 COM 互操作

vb.net - vb中 ":="的定义是什么