2015-01-06 24 views
1

我使用SignalR进行服务器和客户端之间的双向通信,服务器和客户端都使用Win应用程序。如何从服务器发送数据到特定的客户端ID在winForm按钮点击SIgnalR

服务器端我在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(); 
     } 

回答

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)) 
       )) 
      ); 

//显示消息我希望这帮助

+0

感谢它的工作。 – Adam

2

在signalr您可以使用groups的概念,因为状态默认情况下丢失。要发送消息到特定的客户端,您可以map users to connections

+0

是的,我知道团体的概念。在小型演示中似乎很难实现。我只需要做一个测试演示。 – Adam

+0

嗨塔里克。组很容易使用,但不是很有活力。将用户映射到连接的自定义实现是我将使用的。请注意,自从您使用桌面客户​​端http://www.asp.net/signalr/overview/getting-started/supported-platforms以来,您将需要win8 +和.NET 4.5才能使用Websockets。 – Uffe

相关问题