0

I had lot of difficulties after upgrading signalR & .NET version. Previously I had 1.XX version now I have 2.4.0 signal R version.

This question is directly connected with - https://github.com/SignalR/SignalR/issues/4339

But after upgrade signal R doesn't work.

Now the problem is client-side functions cannot call.

I just tried this: Signalr doesn't call client side functions

and fixed it according to the correct answer:

In your init prior to $.connection.hub.start call your _subscribe method.

Later I went through a bit deeper down on this issue, and added console.log below place in my signalr.js

connection.socket.onmessage = function (event) {
    var data;

    try {
        console.log(event.data);
        data = connection._parseResponse(event.data);
    }
    catch (error) {
        transportLogic.handleParseFailure(connection, event.data, error, onFailed, event);
        console.log("socket error" + event.data);
        return;
    }

    if (data) {
        transportLogic.processMessages(connection, data, onSuccess);
    }
};

After every one joins meeting -> meeting start and ask for vote (this place we should call signalR)

From vote asking person side I see console log like this:

Normal user ( voting persons console log looks like this:

This is from Firefox - another user:

I think it already triggering - client hub event 'sendOnlineMeetingVoteRequest' on hub 'NotificationHub'.

It already hit server-side function too but the thing is it never hits this part of the code:

notificationHub.client.sendOnlineMeetingVoteRequest = function (token, meetingId, meetingVoteId) {
    debugger;
    if (token == '@Model.Organization' && '@Model.MeetingId' == meetingId) {
        ShowMeetingOnlineMeetingVotePopup(meetingId, meetingVoteId);
    }
};

I went through http://localhost:33852/signalr/hubs

/*!
 * ASP.NET SignalR JavaScript Library v2.3.0-rtm
 * http://signalr.net/
 *
 * Copyright (c) .NET Foundation. All rights reserved.
 * Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
 *
 */

/// <reference path="..\..\SignalR.Client.JS\Scripts\jquery-1.6.4.js" />
/// <reference path="jquery.signalR.js" />
(function ($, window, undefined) {
    /// <param name="$" type="jQuery" />
    "use strict";

    if (typeof ($.signalR) !== "function") {
        throw new Error("SignalR: SignalR is not loaded. Please ensure jquery.signalR-x.js is referenced before ~/signalr/js.");
    }

    var signalR = $.signalR;

    function makeProxyCallback(hub, callback) {
        return function () {
            // Call the client hub method
            callback.apply(hub, $.makeArray(arguments));
        };
    }

    function registerHubProxies(instance, shouldSubscribe) {
        var key, hub, memberKey, memberValue, subscriptionMethod;

        for (key in instance) {
            if (instance.hasOwnProperty(key)) {
                hub = instance[key];

                if (!(hub.hubName)) {
                    // Not a client hub
                    continue;
                }

                if (shouldSubscribe) {
                    // We want to subscribe to the hub events
                    subscriptionMethod = hub.on;
                } else {
                    // We want to unsubscribe from the hub events
                    subscriptionMethod = hub.off;
                }

                // Loop through all members on the hub and find client hub functions to subscribe/unsubscribe
                for (memberKey in hub.client) {
                    if (hub.client.hasOwnProperty(memberKey)) {
                        memberValue = hub.client[memberKey];

                        if (!$.isFunction(memberValue)) {
                            // Not a client hub function
                            continue;
                        }

                        // Use the actual user-provided callback as the "identity" value for the registration.
                        subscriptionMethod.call(hub, memberKey, makeProxyCallback(hub, memberValue), memberValue);
                    }
                }
            }
        }
    }

    $.hubConnection.prototype.createHubProxies = function () {
        var proxies = {};
        this.starting(function () {
            // Register the hub proxies as subscribed
            // (instance, shouldSubscribe)
            registerHubProxies(proxies, true);

            this._registerSubscribedHubs();
        }).disconnected(function () {
            // Unsubscribe all hub proxies when we "disconnect".  This is to ensure that we do not re-add functional call backs.
            // (instance, shouldSubscribe)
            registerHubProxies(proxies, false);
        });

        proxies['NotificationHub'] = this.createHubProxy('NotificationHub'); 
        proxies['NotificationHub'].client = { };
        proxies['NotificationHub'].server = {

            sendMeetingStartMessage: function (token, meetingId) {
                return proxies['NotificationHub'].invoke.apply(proxies['NotificationHub'], $.merge(["sendMeetingStartMessage"], $.makeArray(arguments)));
             },

            sendMeetingStopMessage: function (token, meetingId) {
                return proxies['NotificationHub'].invoke.apply(proxies['NotificationHub'], $.merge(["sendMeetingStopMessage"], $.makeArray(arguments)));
             },

            sendMeetingTreeRefreshRequest: function (token, meetingId) {
                return proxies['NotificationHub'].invoke.apply(proxies['NotificationHub'], $.merge(["sendMeetingTreeRefreshRequest"], $.makeArray(arguments)));
             },

            sendMessage: function (token, meetingId, agendaGroupItemId, motionId) {
                return proxies['NotificationHub'].invoke.apply(proxies['NotificationHub'], $.merge(["sendMessage"], $.makeArray(arguments)));
             },

            sendOnlineMeetingVoteCloseRequest: function (token, meetingId, meetingVoteId) {
                return proxies['NotificationHub'].invoke.apply(proxies['NotificationHub'], $.merge(["sendOnlineMeetingVoteCloseRequest"], $.makeArray(arguments)));
             },

            sendOnlineMeetingVoteRequest: function (token, meetingId, meetingVoteId) {
                return proxies['NotificationHub'].invoke.apply(proxies['NotificationHub'], $.merge(["sendOnlineMeetingVoteRequest"], $.makeArray(arguments)));
             },

            sendOnlineVoteCloseRequest: function (token, meetingId, agendaGroupItemId, motionId) {
                return proxies['NotificationHub'].invoke.apply(proxies['NotificationHub'], $.merge(["sendOnlineVoteCloseRequest"], $.makeArray(arguments)));
             },


            sendOnlineVoteRequest: function (token, meetingId, agendaGroupItemId, motionId) {
                return proxies['NotificationHub'].invoke.apply(proxies['NotificationHub'], $.merge(["sendOnlineVoteRequest"], $.makeArray(arguments)));
             },


            sendOnlineVoteResult: function (token, meetingId, agendaGroupItemId, motionId, selectedVotingOptionId) {
                return proxies['NotificationHub'].invoke.apply(proxies['NotificationHub'], $.merge(["sendOnlineVoteResult"], $.makeArray(arguments)));
             }
        };

        return proxies;
    };

    signalR.hub = $.hubConnection("/signalr", { useDefaultPath: false });
    $.extend(signalR, signalR.hub.createHubProxies());

}(window.jQuery, window));

So I didn't found any error on it too. Still, I cannot figure it out why this is happening but I went through the sample project that uses signalR 2.0.3.0 version

I went to reference & just noted that this reference - Microsoft.AspNet.SignalR.Owin is not included in that sample project that I downloaded.

I did some investigation furthermore & find out this:

'The call is ambiguous between the following methods or properties' This error will occur if a reference to Microsoft.AspNet.SignalR.Owin is not removed. This package is deprecated; the reference must be removed and the 1.x version of the SelfHost package must be uninstalled. (https://learn.microsoft.com/en-us/aspnet/signalr/overview/releases/upgrading-signalr-1x-projects-to-20)

Do I need to remove that? In my web config, there is no code like this.

1 Answer 1

0

I just call this function purely from another place - about us page. only add relevant script and function. from that place, it worked.

after that, I changed some scripts placing and fix this issue.

the main thing is I didn't get any error or anything. thing looks working all the time. but because of some script placement, it doesn't work.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.