Asp.net 未连接的信号2未按照文件要求工作

Asp.net 未连接的信号2未按照文件要求工作,asp.net,signalr,signalr-2,Asp.net,Signalr,Signalr 2,下面是我为基于的signal实现编写的代码,我使用手动代理创建方法。我只能看到正在进行的协商,并收到了连接id 启动连接时,我看不到集线器中的OnConnected方法被执行。根据文档中的注释部分,在调用start方法之前,我附带了事件处理程序 信号机集线器 public class MyTestHub: Hub { private static Dictionary<int, List<string>> userConnections

下面是我为基于的
signal
实现编写的代码,我使用手动代理创建方法。我只能看到正在进行的协商,并收到了连接id

启动连接时,我看不到集线器中的
OnConnected
方法被执行。根据文档中的注释部分,在调用start方法之前,我附带了事件处理程序

信号机集线器

public class MyTestHub: Hub
{
    private static Dictionary<int, List<string>> userConnections 
                                                     = new Dictionary<int, List<string>>();

    public override Task OnConnected()
    {
        RegisterUserConnectionInMap();
        return base.OnConnected();
    }
}
Javascript客户端代码

var connection = $.hubConnection();
var contosoChatHubProxy = connection.createHubProxy('MyTestHub');
contosoChatHubProxy.on('addContosoChatMessageToPage', function(userName:any, message:any) {
    console.log(userName + ' ' + message);
});
connection.start()
.done(function(){ console.log('Now connected, connection ID=' + connection.id); })
.fail(function(){ console.log('Could not connect'); });

通常在调用
start
方法之前注册事件处理程序 建立联系。如果你想注册一些事件 在建立连接之后,您可以这样做,但是 在调用之前,必须注册至少一个事件处理程序
start
方法。这样做的一个原因是,一个网络中可能有许多集线器 应用程序,但您不希望在上触发
OnConnected
事件 如果您只打算使用其中一个,则每个集线器。当 连接建立后,集线器上的客户端方法的存在 代理是通知信号器触发
OnConnected
事件的功能。如果你 在调用
start
方法之前,请不要注册任何事件处理程序 将能够调用集线器上的方法,但集线器的
OnConnected
方法,并且不会从 服务器

我想不出过去两天我错过了什么

更新


即使我通过包含
尝试使用自动生成的代理类,我也以下面的解决方案结束。希望它能帮助一些人

declare var $: any;

@Injectable()
export class CityChangeNotifier {

constructor(private appService: AppService, private router: Router) {
    this.connection = $.hubConnection();
    this.CityChangeHub = this.connection.createHubProxy('CityChangeNotificationHub');
    this.CityChangeHub
        .on('CityUpdatedByServer', (newLocation:any, connectionId:string) => this.onCityUpdatedByServer(newLocation, connectionId));
    this.connection.transportConnectTimeout = 10000;
    this.startConnection();  
 }

private startConnection(): void {
    let that = this;
    this.connection.start()
        .done((connection: any) => { that.connectionId = connection.id; })
        .fail(() => { });  
  }  
}

你能展示整个客户端脚本吗?您有任何浏览器控制台输出吗?@测试仪附加屏幕快照您找到解决方案了吗?@NguyenTran请查看下面我的答案。对不起,耽搁了。谢谢。它起作用了!我错过了这一行
this.CityChangeHub.on('CityUpdatedByServer',(newLocation:any,connectionId:string)=>this.onCityUpdatedByServer(newLocation,connectionId))
var contosoChatHubProxy = $.connection.myTestHub;
contosoChatHubProxy.client.addContosoChatMessageToPage = function (name, message) {
    console.log(userName + ' ' + message);
};
$.connection.hub.start()
    .done(function(){ console.log('Now connected, connection ID=' + $.connection.hub.id); })
    .fail(function(){ console.log('Could not Connect!'); });
declare var $: any;

@Injectable()
export class CityChangeNotifier {

constructor(private appService: AppService, private router: Router) {
    this.connection = $.hubConnection();
    this.CityChangeHub = this.connection.createHubProxy('CityChangeNotificationHub');
    this.CityChangeHub
        .on('CityUpdatedByServer', (newLocation:any, connectionId:string) => this.onCityUpdatedByServer(newLocation, connectionId));
    this.connection.transportConnectTimeout = 10000;
    this.startConnection();  
 }

private startConnection(): void {
    let that = this;
    this.connection.start()
        .done((connection: any) => { that.connectionId = connection.id; })
        .fail(() => { });  
  }  
}