公共任务连接(),当用户连接到集线器类不点火

问题描述:

我有以下毂类:公共任务连接(),当用户连接到集线器类不点火

public class Dashboard : Hub, IDisconnect, IConnected 
    { 
     //Initialize Repoisotries 
     private IProfileRepository profileRepository; 
     private ISiteDataRepository siteDataRepository; 
     private readonly IHubContext matchContext = GlobalHost.ConnectionManager.GetHubContext<MatchMaker>(); 

    //Constructor Injection for profile repository and site data repository 
    public Dashboard(IProfileRepository repo, ISiteDataRepository siteRepo) 
    {    
     profileRepository = repo; 
     siteDataRepository = siteRepo;    
    } 
    public Task Disconnect() 
    { 
     return null; 
    } 
    public Task Reconnect(IEnumerable<string> connections) 
    { 
     return null; 
    } 
    public Task Connect() 
    { 
     Debug.WriteLine(MatchMaker.onlineUsers.Count); 
     return null; 
    } 
    public void GetUserInfo() 
    { 
     Debug.WriteLine(MatchMaker.onlineUsers.Count); 
    } 
} 

}

我有signalr包括:

<script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script> 

我访问它是这样的:

$(function() { 
    //Create the proxy 
    var Dashboard = $.connection.dashboard; 
    $.connection.hub.start(function() { 
     Dashboard.getUserInfo(); 

    }); 
}); 

当我打电话给Dashboard.getUserInfo()时,这个方法被称为find,但是Connect()方法首先不会触发。

我发现了什么是错的......只要我说像这样的方法:

$(function() { 
//Create the proxy 
var Dashboard = $.connection.dashboard; 

Dashboard.someMethod = function(message){ 
} 

$.connection.hub.start(function() { 
    Dashboard.getUserInfo(); 

}); 
}); 

Connect()功能开始射击,不知道你需要一个客户端功能在那里以激活连接。

+1

是的,你至少需要一个订阅。这是“优化”,所以你最终不会订阅你不需要的集线器。 – davidfowl 2012-08-10 03:15:03

+0

我也一直在为这个问题烦恼。也许这可以添加到wiki? – Lodewijk 2012-08-28 10:04:59