.net core Signal-R在接收到以前的调用数据后调用另一个服务器方法
我正在阅读有关Signal-R的Microsoft教程,并希望在.Net Core中使用它而不是Ajax,考虑到来自Microsoft的以下代码,在接收到来自broadcastMessage函数(定义为javascript函数)中第一次调用的数据后,我们是否可以进行另一次服务器调用.net core Signal-R在接收到以前的调用数据后调用另一个服务器方法,.net-core,signalr,.net Core,Signalr,我正在阅读有关Signal-R的Microsoft教程,并希望在.Net Core中使用它而不是Ajax,考虑到来自Microsoft的以下代码,在接收到来自broadcastMessage函数(定义为javascript函数)中第一次调用的数据后,我们是否可以进行另一次服务器调用 $(函数(){ //声明代理以引用中心。 var chat=$.connection.chatHub; //创建一个中心可以调用以广播消息的函数。 chat.client.broadcastMessage=函数(名
$(函数(){
//声明代理以引用中心。
var chat=$.connection.chatHub;
//创建一个中心可以调用以广播消息的函数。
chat.client.broadcastMessage=函数(名称、消息){
//Html编码显示名称和消息。
var encodedName=$('').text(name).html();
var encodedMsg=$('').text(message.html();
//将消息添加到页面。
$(“#讨论”)。追加(“”+encodedName
+“:”+encodedMsg+” );
};
//获取用户名并将其存储到消息前。
$('#displayname').val(提示('输入您的姓名:','');
//将初始焦点设置为消息输入框。
$(“#消息”).focus();
//启动连接。
$.connection.hub.start().done(函数(){
$('#sendmessage')。单击(函数(){
//在集线器上调用Send方法。
chat.server.send($('#displayname').val(),$('#message').val());
//清除文本框并重置下一条注释的焦点。
$('#message').val('.focus();
});
});
});
这样我们就可以检查接收到的数据并有条件地发起另一个调用。
或者,如果所有服务器调用都应该放在$.connection.hub.start().done(函数(){?中,则可以在收到消息后调用其他方法,如下所示: 类型脚本示例:
//启动与消息控制器的连接
公共startConnectionMessage=()=>{
this.hubMessageConnection=new signal.HubConnectionBuilder()
.configureLogging(signar.LogLevel.Debug)
.withUrl('http://localhost:20000/notifications')
.build();
这个.hubMessageConnection
.start()
.然后(()=>{
//连接开始后
log('通知服务连接已启动!');
//启动组侦听器。
this.addTransferGroupMessageListener();
//获取连接ID。
这个.GetConnectionID();
})
.catch(err=>console.log('启动连接时出错:'+err))
}
//组频道列表器。
public addTransferGroupMessageListener=()=>{
this.hubMessageConnection.on(“groupMessage”,数据:any)=>{
控制台日志(数据);
});
}
私有GetConnectionID(){
this.hubMessageConnection.invoke(“GetConnectionID”)
.然后((connectionID:string)=>{
console.log(“received connectionID=“+connectionID”);
//调用该方法以注册AppContextData。
此.sendApplicationContextData(connectionID)
}).catch((错误:error)=>{
日志(“错误:+错误”);
})
}
私有sendApplicationContextData(connectionID:string){
//将收到的connectionID添加到有效负载。
this.connection.ConnectionID=ConnectionID;
log(“发送应用程序数据”);
console.log(this.connection);
//用于传递AppContext数据的inovke服务器端方法。
this.hubMessageConnection.invoke(“RegisterAppContextData”,this.connection)
.然后()
.catch((错误:error)=>{
日志(“错误:+错误”);
});
}
您可以看到,在建立连接后,我调用了一个hub方法,该方法只返回一个connectionID,并基于connectionID调用另一个发送该参数的方法。服务器端hub方法包括:
公共字符串GetConnectionID()
{
返回this.Context.ConnectionId;
}
公共异步任务注册表AppContextData(AppContextData)
{
//呼叫组经理。
等待这个.MapClientToGroup(数据);
}
在此之前,我发现了另一个stackoverflow帖子,这一点非常清楚:我认为解决方案是:函数doSomething{if($.connection.hub.state==$.signar.connectionState.disconnected){$.connection.hub.start().done(函数(){myHub.server.myHubMethod();});}else{myHub.server.myHubMethod();}}@mz1378,但在这种情况下,您可以调用连接状态下的方法。但它可能适用于您:)
<script type="text/javascript">
$(function () {
// Declare a proxy to reference the hub.
var chat = $.connection.chatHub;
// Create a function that the hub can call to broadcast messages.
chat.client.broadcastMessage = function (name, message) {
// Html encode display name and message.
var encodedName = $('<div />').text(name).html();
var encodedMsg = $('<div />').text(message).html();
// Add the message to the page.
$('#discussion').append('<li><strong>' + encodedName
+ '</strong>: ' + encodedMsg + '</li>');
};
// Get the user name and store it to prepend to messages.
$('#displayname').val(prompt('Enter your name:', ''));
// Set initial focus to message input box.
$('#message').focus();
// Start the connection.
$.connection.hub.start().done(function () {
$('#sendmessage').click(function () {
// Call the Send method on the hub.
chat.server.send($('#displayname').val(), $('#message').val());
// Clear text box and reset focus for next comment.
$('#message').val('').focus();
});
});
});
</script>