2017-11-30 4 views
2

강력하게 유형화 된 허브에서 서버로부터 메소드를 호출하는 방법을 찾으려고합니다. 나는 닷넷 코어를 사용하고 2.0SignalR - Context에서 정적으로 입력 된 허브를 호출하십시오.

I stongly 입력 허브 인터페이스가 있습니다

public interface IMessageHub 
{ 
    Task Create(Message message); 
} 

등과 같은 허브 : 일반적으로 내가 밀어 수있는 서버에

public class MessageHub: Hub<IMessageHub> 
{ 
    public async Task Create(Message message) 
    { 
     await Clients.All.Create(message);  
    } 
} 

을 그래서 같은 컨텐츠를 클라이언트로 :

[Route("api/[controller]")] 
public MessagesController : Controller 
{ 
     IHubContext<MessagesHub> context; 
     public MessagesController(IHubContext<MessagesHub> context) 
     { 
      this.context = context; 
     } 

     public Message CreateMessage(Message message) 
     { 
      this.context.Clients.All.InvokeAsync("Create", message); 
      return message; 
     } 
} 

는 어떻게 정적으로 입력 된 허브의 메소드를 호출하거나 내가 가지고 할 수있는 허브 작동 방법에 대한 오해?

+0

https://stackoverflow.com/questions/46904678/을 참조하십시오. call-signalr-core-hub-method-controller/46906849 # 46906849. 솔루션 2에서 솔루션을 찾을 수 있습니다. – Tester

+0

@Tester 감사합니다. 이전에 시도 했었지만 질문을 단순화했습니다. 내 클라이언트 인터페이스가 클라이언트에 푸시하기 위해 DTO를 사용하는 Generic이면 어떻습니까? –

답변

1

가능합니다. 허브에서

public interface ITypedHubClient 
    { 
    Task BroadcastMessage(string name, string message); 
    } 

상속 : 당신은 당신의 서버가 클라이언트에서 호출 할 수있는 방법을 정의하는 경우

간단한이 인터페이스를 만들 : 다음 단계로 샘플 단계입니다 주입

public class ChatHub : Hub<ITypedHubClient> 
     { 
     public void Send(string name, string message) 
     { 
      Clients.All.BroadcastMessage(name, message); 
     } 
     } 

은 컨트롤러에 입력 된 허브 컨텍스트를 사용하여 작업하십시오.

[Route("api/demo")] 
    public class DemoController : Controller 
    { 
    IHubContext<ChatHub, ITypedHubClient> _chatHubContext; 
    public DemoController(IHubContext<ChatHub, ITypedHubClient> chatHubContext) 
    { 
     _chatHubContext = chatHubContext; 
    } 
    // GET: api/values 
    [HttpGet] 
    public IEnumerable<string> Get() 
    { 
     _chatHubContext.Clients.All.BroadcastMessage("test", "test"); 
     return new string[] { "value1", "value2" }; 
    } 
    } 
+0

답이 맞기 때문에 올바른 답변을 드리겠습니다. 인터페이스 유형이 일반 매개 변수 인 경우 –

+0

@ johnny 5를 모르는 경우이를 수행 할 수있는 방법을 알고 계십니까? 오늘 저녁에 먼저 테스트해야합니다. – Tester

+0

고마워요. 중요한 아키텍처 문제가 있습니다. 내가하고 싶은 일이 가능하면 가능하지 않습니다. 또한 IHubContext의 변하지 않는 버전을 찾고 있습니다. 모든 것을 재 설계하다 –

관련 문제