SignalR不会触发客户端的功能

时间:2014-12-29 13:28:05

标签: asp.net winforms signalr real-time

我试图从服务器调用到客户端并将字符串传递给客户端的函数或将文本添加到客户端文本框 - 没有任何作用,代码正在运行但没有任何反应(客户端连接到服务器没有问题)有什么问题?谢谢。 //服务器

class Hub:hub
{
        public void sendClientIdToServer()
        {            
            Clients.Caller.getFeedBack("hey");           
        }
}

//客户端

 private async void connectToServer()
        {         
            Connection = new HubConnection(LocalClient);         
            HubProxy = Connection.CreateHubProxy("ConnectByHub");
            //try to call another function and pass to the function a string.
            HubProxy.On("getFeedBack", (msg) => Invoke((Action)(() => { getFeedBack(msg); })));  
            // try to add text to richTextBox
            HubProxy.On<string>("getFeedBack", (msg) => Invoke((Action)(() => { MsgTxtBox.Text = msg;    })));   
            try
            {              
                await Connection.Start();               
            }
            catch (Exception ex)
            {
                Invoke((Action)(() => { connectStat.Text = "Error Not connected"; }));
                return;
            }
            Invoke((Action)(() => { connectStat.Text = "connected ClientA"; }));                                            
        }

  //function


public void getFeedBack(string message){

            string test = message;

        }

2 个答案:

答案 0 :(得分:0)

很简单。 客户的方法&#34;没有像普通方法那样定义。

看看here

滚动到底部。看看他们如何定义客户的方法。

从带有参数的服务器调用的方法的WPF客户端代码示例(直接从链接引用)

stockTickerHubProxy.On<Stock>("UpdateStockPrice", stock => 
    Dispatcher.InvokeAsync(() =>
        {
            textBox.Text += string.Format("Stock update for {0} new price {1}\n", stock.Symbol, stock.Price);
        })
);

好吧,如果您使用的是WinForms,代码会有所不同,但也非常相似:)


*修改

试试这个: 变化

HubProxy.On<string>("getFeedBack", (msg) => Invoke((Action)(() => { MsgTxtBox.Text = msg;    })));   

HubProxy.On<string>("getFeedBack", (msg) => 
    this.Invoke(new MethodInvoker(delegate
    {
        MsgTxtBox.Text = msg;
    }));
});

答案 1 :(得分:0)

在你的中心,你写道:

HubProxy.On("getFeedBack", (msg) => Invoke((Action)(() => { getFeedBack(msg); })));  

“getFeedBack”这里是Server调用Client的方法。

您应该更改代码:

服务器:

class Hub:hub
{
    public void sendClientIdToServer()
    {            
        Clients.Client(Context.ConnectionId).getFeedBack("hey");           
    }
}

客户:

HubProxy.On("getFeedBack");  

您还从服务器订阅:

HubProxy.On<string>("getFeedBack", (msg) => 
this.Invoke(new MethodInvoker(delegate
{
    MsgTxtBox.Text = msg;
}));
});