Lucas_Santos
Lucas_Santos

Reputation: 4740

Public method not firing in SignalR

I have a simple application, like a chat, integrated with SignalR. I added a new method on my Hub and a new function on client side, like you can see below.

The problem is, my method called SendMessageChat isn't firing, because occurs the following error

TypeError: chat2.server.SendMessageChat is not a function

but the method chat2.server.send works fine, and I don't know why my second method doesn't work. Can someone help me ?

JavaScript

$(function () {

    var chat2 = $.connection.redirectTask;

    chat2.client.broadcastMessage = function (name, message) {
         // Do something here
    };

    chat2.client.sendMessage = function (name, message) {
         // Do something here
    };

    //$.connection.hub.logging = true;
    $.connection.hub.start().done(function () {

        /* BUTTON CLICK IN ANOTHER PAGE */ 
        $('#btnFinish').click(function () {
                chat2.server.send($.cookie("User"), $("#lista :selected").text());
        });

        /* CASE HIT ENTER INSIDE THE TEXT FIELD IN CHAT */
        $(document).on("keypress", "#txtChat", function (e) {
            var code = (e.keyCode ? e.keyCode : e.which);
            if (code == 13) {                
                var message = $(this).val();                
                $(this).val("");
                chat2.server.SendMessageChat($.cookie("User"), message);
            }
        });
    });    
});

SERVER SIDE

public class RedirectTask : Hub
{
    public void Send(string nome, string message)
    {
        Clients.All.broadcastMessage(name, message);            
    }

    public void SendMessageChat(string nome, string message)
    {
        Clients.All.sendMessage(name, message);
    }
}

Upvotes: 0

Views: 233

Answers (1)

Pepto
Pepto

Reputation: 1444

Reference

Need to change to

chat2.server.sendMessageChat($.cookie("User"), message);

Camel-casing of method names in JavaScript clients

By default, JavaScript clients refer to Hub methods by using a camel-cased version of the method name. SignalR automatically makes this change so that JavaScript code can conform to JavaScript conventions.

Server

public void NewContosoChatMessage(string userName, string message)

JavaScript client using generated proxy

contosoChatHubProxy.server.newContosoChatMessage(userName, message);

If you want to specify a different name for clients to use, add the HubMethodName attribute.

Server

[HubMethodName("PascalCaseNewContosoChatMessage")]
public void NewContosoChatMessage(string userName, string message)

JavaScript client using generated proxy

contosoChatHubProxy.server.PascalCaseNewContosoChatMessage(userName, message);

Upvotes: 3

Related Questions