C# 在信号机中加入一个组
我正在开发WPF应用程序,其中一个程序实例将能够通过SignalR Self Host与另一个进行通信。一切都很好,只是我不知道如何和在哪里加入一个组,以便程序知道哪些用户发送通知。任何帮助都将不胜感激。 以下是我的示例代码:C# 在信号机中加入一个组,c#,wpf,signalr,C#,Wpf,Signalr,我正在开发WPF应用程序,其中一个程序实例将能够通过SignalR Self Host与另一个进行通信。一切都很好,只是我不知道如何和在哪里加入一个组,以便程序知道哪些用户发送通知。任何帮助都将不胜感激。 以下是我的示例代码: //client side private async void ConnectAsync() { Connection = new HubConnection(ServerURI); Connection.Closed += Connection_Clo
//client side
private async void ConnectAsync()
{
Connection = new HubConnection(ServerURI);
Connection.Closed += Connection_Closed;
HubProxy = Connection.CreateHubProxy("MyHub");
//Handle incoming event from server: use Invoke to write to console from SignalR's thread
HubProxy.On<string, string>("AddMessage", (name, message) =>
this.Dispatcher.Invoke(() => RichTextBoxConsole.AppendText(String.Format("{0}: {1}\r", name, message))
)
);
try
{
await Connection.Start();
}
catch (HttpRequestException)
{
StatusText.Content = "Unable to connect to server: Start server before connecting clients.";
//No connection: Don't enable Send button or show chat UI
return;
}
HubProxy.Invoke<string>("JoinGroup", "foobar").Wait(); // Do I have to do it here?
}
//serverside
public class MyHub : Hub
{
public void Send(string name, string message)
{
Clients.Group("foobar").AddMessage(name, message);
}
public Task JoinGroup(string groupName)
{
return Groups.Add(Context.ConnectionId, groupName);
}
public Task AddGroups()
{
return Groups.Add(Context.ConnectionId, "foobar");
}
public override Task OnConnected()
{
return AddGroups();
}
}
//客户端
私有异步void ConnectAsync()
{
连接=新的HUB连接(ServerURI);
连接关闭+=连接关闭;
HubProxy=Connection.CreateHubProxy(“MyHub”);
//处理来自服务器的传入事件:使用Invoke从信号器的线程写入控制台
HubProxy.On(“AddMessage”,(名称、消息)=>
this.Dispatcher.Invoke(()=>RichTextBoxConsole.AppendText(String.Format(“{0}:{1}\r”,名称,消息))
)
);
尝试
{
等待连接。开始();
}
捕获(HttpRequestException)
{
StatusText.Content=“无法连接到服务器:在连接客户端之前启动服务器。”;
//无连接:不启用发送按钮或显示聊天界面
返回;
}
HubProxy.Invoke(“JoinGroup”、“foobar”).Wait();//我必须在这里执行吗?
}
//服务器端
公共类MyHub:Hub
{
公共无效发送(字符串名称、字符串消息)
{
Clients.Group(“foobar”).AddMessage(名称、消息);
}
公共任务组(字符串组名)
{
返回Groups.Add(Context.ConnectionId,groupName);
}
公共任务AddGroups()
{
返回Groups.Add(Context.ConnectionId,“foobar”);
}
已连接的公用覆盖任务()
{
返回AddGroups();
}
}
我认为您的方法几乎正确,但您的OnConnected
方法不太正确
尝试将其更改为:
public override Task OnConnected()
{
Groups.Add(Context.ConnectionId, "foobar");
return base.OnConnected();
}
这基本上就是我使用的代码,不同之处在于
base.OnConnected()
部分,这是我猜测您的问题所在。我认为您的方法几乎正确,但您的OnConnected
方法不太正确
尝试将其更改为:
public override Task OnConnected()
{
Groups.Add(Context.ConnectionId, "foobar");
return base.OnConnected();
}
这基本上就是我使用的代码,不同之处在于
base.OnConnected()
部分,这是我猜测您的问题所在。问题在于添加新组时:
public Task AddGroups()
{
return Groups.Add(Context.ConnectionId, "foobar");
}
出于某种原因,它在组名中添加了前缀“hg MyHub.”,因此组名如下所示:“hg MyHub.foobar”,当然使用以下代码:
HubProxy.Invoke<string>("JoinGroup", "foobar").Wait();
HubProxy.Invoke(“JoinGroup”、“foobar”).Wait();
只是因为没有名为“foobar”的组,所以没有做任何事情。
希望这对其他人有用。问题是,添加新组时:
public Task AddGroups()
{
return Groups.Add(Context.ConnectionId, "foobar");
}
出于某种原因,它在组名中添加了前缀“hg MyHub.”,因此组名如下所示:“hg MyHub.foobar”,当然使用以下代码:
HubProxy.Invoke<string>("JoinGroup", "foobar").Wait();
HubProxy.Invoke(“JoinGroup”、“foobar”).Wait();
只是因为没有名为“foobar”的组,所以没有做任何事情。
希望这对某人有用。谢谢你的帮助,但不是这样。我已经发布了解决问题的解决方案。谢谢你的帮助,但不是这样。我已经发布了解决问题的解决方案。