在SignalR中调用服务器和客户端方法

时间:2013-12-09 13:09:08

标签: c# javascript asp.net signalr-hub

以下代码使用ASP.Net SignalR Hub技术。这些代码没有按预期工作。当我点击Hello Butting它工作正常但是当我点击UserList时没有发生任何事情。我已经发出一个警报,发现服务器方法正在调用,但之后没有发生任何事情。

的JavaScript

$(function () {
    // Declare a proxy to reference the hub.
    var chat = $.connection.chatHub;

    chat.client.OnlineFriends = function (userLists) {
        alert(userLists);
    };

    chat.client.Hello = function (message) {
        alert(message);
    };

    // Start the connection.
    $.connection.hub.start().done(function () {

        $('#btnGetUser').click(function () {
            chat.server.Friends();
        });

        $('#btnHello').click(function () {                    
            chat.server.test("message to server from client");                    
            //
        });
    });
});

和C#代码

public class ChatHub : Hub
{
    public void Test(string str)
    {
        Clients.Caller.Hello(str + " | Message received at server reply from server.");
    }
    public void Friends()
    {
        Clients.Caller.OnlineFriends("myid");
    }
}

和HTML

<div>

    <input type="button" id="btnHello" value="Hello" />
    <input type="button" id="btnGetUser" value="UserList" />
</div>

请帮助找出问题所在。

3 个答案:

答案 0 :(得分:2)

您可以尝试更改行

chat.server.Friends();

到:

chat.server.friends();

我猜生成的javascript在命名方面有java约定。这是我从这两种方法中可以看到的唯一区别。

答案 1 :(得分:2)

如@scheien所述,您需要使用小写首字母调用该方法。 (可选)您可以将集线器方法名称指定为详细here

[HubMethodName("MyNewMethodName")]
public void Friends()

然后使用该新名称

调用服务器函数
chat.server.MyNewMethodName();

答案 2 :(得分:0)

chat.client.onlineFriends = function (userLists) {
        alert(userLists);
    };

但...... userLists在集线器上不存在:

Clients.CalleronlineFriends("myid");

这是一回事,另一件让我注意的事情是javascript部分不以大写字母开头

因此,您还必须将FriendsHelloOnlineFriends更改为friendshello onlineFriends