C# 在信号机中加入一个组

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

我正在开发WPF应用程序,其中一个程序实例将能够通过SignalR Self Host与另一个进行通信。一切都很好,只是我不知道如何和在哪里加入一个组,以便程序知道哪些用户发送通知。任何帮助都将不胜感激。 以下是我的示例代码:

//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”的组,所以没有做任何事情。
希望这对某人有用。

谢谢你的帮助,但不是这样。我已经发布了解决问题的解决方案。谢谢你的帮助,但不是这样。我已经发布了解决问题的解决方案。