SignalR未访问的typeError:CurrentHub.Server.onconnected不是一个函数(…)



我使用signalr javaScript客户端连接到sugnalr hub。

轮毂连接的方法是此

   public override Task OnConnected()
        {
            try
            {
                 var cType = Context.QueryString["type"];
                var connectionId = Context.ConnectionId;
                var connectedUserList = (from d in Users
                                         where d.ClientType == cType
                                                          select d).ToList();
                if (connectedUserList.Count > 0)
                {
                    var conUser = connectedUserList.First<ConnectedUsers>();
                    conUser.ConnectionIds.Add(connectionId);
                }
                else
                {
                    var newUser = new ConnectedUsers
                    {
                        ConnectionIds = new HashSet<string> {connectionId}
                       ,
                        ClientType = cType
                    };
                    Users.Add(newUser);
                }
            }
            catch (Exception ex)
            {
            }
            return base.OnConnected();
        }

其他集线器方法

 public void PushMessage()
        {
            try
            {
                var context = GlobalHost.ConnectionManager.GetHubContext<MainHub>();
                   var user = (from d in Users
                                       where d.ClientType == "WIN"
                                       select d).Single();
                context.Clients.Clients(user.ConnectionIds.ToArray()).sendAlert("EXCEL");
            }
            catch (Exception e)
            {
                //throw;
            }
        }

和JavaScript客户端连接代码如下

<html>
<body>
    @RenderBody()
    @Scripts.Render("~/bundles/jquery")
    <script src="~/Scripts/jquery.signalR-2.2.1.js"></script>
    <script src="@Url.Content("http://localhost:1010/signalr/hubs")"></script> 
    @RenderSection("scripts", required: false)
</body>
</html>

<script type="text/javascript">
    var currentHub = [];
    var connectionDetails = {};
    var SignalRHandler = {
        _settings: {
            connectionDetails: {
                id: "1",
                userName: ""
            },
            hub: $(),
            callBack: $(),
            url: ""
        },
        initilaize: function(options) {
            this._settings = $.extend(true, this._settings, options);
            if (!$.connection)
                alert("$.connection undefined");
            else
                this._bindEvents();
        },
        _bindEvents: function() {
            // Start Hub
            $.connection.hub.url = this._settings.url;
            $.connection.hub.qs = { 'type': 'WEB' }
            currentHub = $.connection[this._settings.hub], connectionDetails = this._settings.connectionDetails;
            if (currentHub != undefined) {
                currentHub.client.sendAlert = this._settings.callBack;
                $.connection.hub.start().done(function() {
                    currentHub.server.OnConnected();
                });
                $.connection.hub.disconnected(function() {
                    setTimeout(function() {
                        $.connection.hub.start().done(function() {
                            currentHub.server.OnConnected();
                        });
                    }, 2000); // Restart connection after 2 seconds.
                });
            }
        },
        pushChatMessage: function () {
            currentHub.server.pushMessage();
        },
        showMsg:function(msg) {
            alert(msg);
        }
    };
    jQuery(document).ready(function($) {
        SignalRHandler.initilaize({
            callBack: SignalRHandler.showMsg,
            hub: "mainHub",
            url: "http://localhost:1010/signalr/"
        });
    });
</script>

此代码正常工作,并连接到集线器,并连续接收来自集线器的消息。但是当我检查调试器控制台时,它说。

untured typeError:CurrentHub.Server.onconned不是函数(…)

如何摆脱此错误?

当您从信号端客户端调用服务器方法时,方法名称应在骆驼盒中,除非您使用HUB中方法上的HubMethodName属性指定了其他名称。<<<<<<<<<<<</p>

因此,在您的情况下,您的 OnConnected方法应该看起来像: currentHub.server.onConnected();

参考:https://www.asp.net/signalr/signalr/overview/guide-to-to-to-the-the-api/hubs-api-guide-guide-guide-javascript-client-client-callserver

最新更新