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(() => { });
}
}