SignalR Client方法在hub.start()之前绑定,但在服务器方法

时间:2016-01-23 19:43:23

标签: signalr

我可以在我的服务器方法中设置断点,并在集线器启动时调用它。如果我在hub.start()上放置一个断点,我确实看到连接已经绑定了方法的客户端版本。但不知何故,该方法不是从服务器调用的。这是我的代码:

服务器方法

 [HubName("MovementHub")]
public class MovementHub : Hub
{
    public void UpdatePlayerPosServer(PlayerPosition playerPosition)
    {
        playerPosition.LastUpdatedBy = Context.ConnectionId;
        Clients.AllExcept(playerPosition.LastUpdatedBy).updatePlayerPosClient(playerPosition); //debugging here shows the playerposition all filled out nicely. this hub method is HIT.
    }
}

客户端方法

$(() => {

var connection = (<any>$.connection).MovementHub; 

    //this method is never called
   connection.client.updatePlayerPosClient = (playerPosModel) => {
        alert("updatingremotePlayers: " + playerPosModel);            
    }

});

Hub Start(typescript类。方法从另一个类调用)

public updateServerPos = (x: number, y: number) => {
        var connection = (<any>$.connection).MovementHub;         
        this.LoginID = $("#displayname").val();

        $.connection.hub.start().done(() => {
            var playerposModel = { Id: this.LoginID, X: x, Y: y };
            connection.server.updatePlayerPosServer(playerposModel); //debugging here shows me that "connection" has the client method bound at this point
        }).fail(function(error) {
            console.log(error);
        });
    }

我已经阅读了一些关于这一点的帖子,指出你必须在集线器启动之前绑定客户端方法,但确实如此。并且正确调用服务器方法。所以不确定这里有什么。

编辑:我意识到,我是一个白痴,可能成为被#34; AllExcept&#34;跳过的受害者。打电话给客户。我是个例外!洛尔

唯一剩下的问题是为什么我必须让客户端方法&#34;实例化&#34;在IFFE?我想将它放在调用服务器方法的相同Typescript类中。

1 个答案:

答案 0 :(得分:1)

结果混合javascript IIFE调用带打字稿的调用可能是危险的。在这个客户端方法绑定之前,我有一个完全不相关的(我认为)集线器开始发生。我意识到,即便如此,我还有两个Hub,其中只有一个hub.start();傻我。