2016-09-30 2 views
1

프로그램의 한 인스턴스가 SignalR 자체 호스트를 통해 다른 사람과 통신 할 수있는 WPF 응용 프로그램을 개발 중입니다. 프로그램이 어떤 사용자가 알림을 보낼지 알 수 있도록 그룹에 어떻게 그리고 어디에서 가입해야하는지 모르는 것을 제외하고는 모든 것이 좋습니다. 어떤 도움을 주시면 감사하겠습니다. 난 당신이 거의 권리가 생각SignalR에서 그룹에 가입하기

//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(); 
    } 
} 

답변

0

문제였습니다 새로운 그룹 추가 할 때 ". HG-MyHub"

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

그 어떤 이유로 추가 접두어를 그룹의 이름으로 그룹의 이름이이처럼 보였다 그래서 "HG-MyHub.foobar"이 코드를 사용하여 물론 :

HubProxy.Invoke<string>("JoinGroup", "foobar").Wait(); 
이름을 가진 그룹이 없었다 간단하기 때문에

아무것도하지 않았다 "foobar". 희망이 있으면 누군가에게 유용 할 수 있습니다.

0

하지만 OnConnected 방법은 꽤 괜찮되지 않습니다 : 여기 내 예제 코드입니다. 이것은 기본적으로 제가 사용했던 코드

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

, 그 차이는 당신을 위해 깨고 무엇을 나의 추측이다 base.OnConnected() 일부입니다

가로 변경합니다.

+0

도움 주셔서 감사합니다.하지만 그렇지 않았습니다. 문제를 해결 한 솔루션을 게시했습니다. – niks