.net core Signal-R在接收到以前的调用数据后调用另一个服务器方法

.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=函数(名

我正在阅读有关Signal-R的Microsoft教程,并希望在.Net Core中使用它而不是Ajax,考虑到来自Microsoft的以下代码,在接收到来自broadcastMessage函数(定义为javascript函数)中第一次调用的数据后,我们是否可以进行另一次服务器调用


$(函数(){
//声明代理以引用中心。
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>:&nbsp;&nbsp;' + 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>