公共方法没有在SignalR中触发

时间:2014-06-25 18:17:29

标签: signalr

我有一个简单的应用程序,如聊天,与SignalR集成。我在我的Hub上添加了一个新方法,并在客户端添加了一个新功能,如下所示。

问题是,我的方法SendMessageChat没有被触发,因为发生了以下错误

TypeError: chat2.server.SendMessageChat is not a function

但方法chat2.server.send工作正常,我不知道为什么我的第二种方法不起作用。有人能帮助我吗?

的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);
            }
        });
    });    
});

服务器端

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);
    }
}

1 个答案:

答案 0 :(得分:3)

Reference

需要更改为

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

JavaScript客户端中方法名称的Camel-casing

默认情况下,JavaScript客户端通过使用方法名称的驼峰版本来引用Hub方法。 SignalR自动进行此更改,以便JavaScript代码符合JavaScript约定。

服务器

public void NewContosoChatMessage(string userName, string message)

使用生成代理的JavaScript客户端

contosoChatHubProxy.server.newContosoChatMessage(userName, message);

如果要为要使用的客户端指定其他名称,请添加HubMethodName属性。

服务器

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

使用生成代理的JavaScript客户端

contosoChatHubProxy.server.PascalCaseNewContosoChatMessage(userName, message);