我正在使用SignalR进行服务器和客户端之间的双向通信,服务器和客户端都在使用Win应用程序。
服务器端我在DropDownlist中添加了所有连接的客户端ID,现在我想做两件事。
1)我想从下拉列表中选择客户端ID,然后在按钮点击时将字符串发送到选定的客户端。
我的服务器端在这里:
private void buttonClient_Click(object sender, EventArgs e)
{
// here i want write code for send data to selected client .
string Clientid = comboBoxClients.SelectedItem.ToString();
}
public class MyHub : Hub
{
public void Send(string name, string message){ Clients.All.addMessage(name, message);}
}
我的客户端代码:
private void ButtonSend_Click(object sender, EventArgs e)
{
HubProxy.Invoke("Send", UserName, TextBoxMessage.Text);
TextBoxMessage.Text = String.Empty;
TextBoxMessage.Focus();
}
答案 0 :(得分:2)
首先添加IhubContext的全局对象。
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
private void buttonClient_Click(object sender, EventArgs e)
{
string Clientid = comboBoxClients.SelectedItem.ToString();
// sendOrders(string,string) this method should make on client side with same name and here call like thats .
context.Clients.Client(Clientid).sendOrders("Name","Message Server to you");
}
//我的客户端代码: //创建并连接集线器连接和集线器代理,并调用方法名称SendOrders。 //在consolewindow中显示消息
HubProxy.On<string, string>("sendOrders", (name, myString) =>
this.Invoke((Action)(() =>
RichTextBoxConsole.AppendText(String.Format("{0}: {1}" + Environment.NewLine, name, myString))
))
);
我希望这个帮助
答案 1 :(得分:2)
在signalr中,您可以使用groups的概念,因为默认情况下缺少状态。要向特定客户发送消息,您可以map users to connections