加入SignalR的一个小组

时间:2016-09-30 16:33:01

标签: c# wpf signalr

我正在开发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();
    }
}

2 个答案:

答案 0 :(得分:0)

我认为你几乎没有,但你的OnConnected方法并不完全正确。

尝试将其更改为:

public override Task OnConnected()
    {
        Groups.Add(Context.ConnectionId, "foobar");
        return base.OnConnected();
    }

这基本上就是我使用过的代码,不同之处在于base.OnConnected()部分,这是我猜测是什么打扰你。

答案 1 :(得分:0)

问题在于添加新组时:

public Task AddGroups()
{
    return Groups.Add(Context.ConnectionId, "foobar");
}

由于某种原因,它添加了前缀&#34; hg-MyHub。&#34;至于集团的名称,因此该集团的名称如下所示:&#34; hg-MyHub.foobar&#34;当然使用这段代码:

HubProxy.Invoke<string>("JoinGroup", "foobar").Wait();

没有做任何事情只是因为没有名字的小组&#34; foobar&#34;。 希望这对某些人有用。