>백엔드 개발 >C++ >ASP.NET Core 컨트롤러에서 SignalR Core Hub 메서드를 어떻게 호출할 수 있나요?

ASP.NET Core 컨트롤러에서 SignalR Core Hub 메서드를 어떻게 호출할 수 있나요?

Patricia Arquette
Patricia Arquette원래의
2025-01-04 09:13:34873검색

How Can I Call a SignalR Core Hub Method from an ASP.NET Core Controller?

컨트롤러에서 SignalR Core Hub 메서드 호출

ASP.NET Core 애플리케이션에서는 컨트롤러에서 SignalR 허브와 통신해야 하는 경우가 많습니다. 서버 측 이벤트로 클라이언트 측 애플리케이션을 업데이트합니다. 이를 달성하기 위한 두 가지 접근 방식은 다음과 같습니다.

해결책 1: 유형이 지정되지 않은 HubContext 사용

이 방법을 사용하면 연결된 모든 클라이언트에서 메서드를 직접 호출할 수 있습니다. 유형이 지정되지 않은 IHubContext 컨트롤러에:

public class VarDesignCommController : Controller
{
    private readonly IHubContext<VarDesignHub> _hubContext;

    public VarDesignCommController(IHubContext<VarDesignHub> hubContext)
    {
        _hubContext = hubContext;
    }

    [HttpPut("ProcessVarDesignCommResponse/{id}")]
    public async Task<IActionResult> ProcessVarDesignCommResponse(int id)
    {
        await _hubContext.Clients.All.InvokeAsync("TaskCompleted", id);

        return new JsonResult(true);
    }
}

해결책 2: 형식화된 허브 및 인터페이스 사용

이 접근 방식은 형식화된 허브와 인터페이스를 사용하여 호출할 수 있는 클라이언트측 메서드를 정의합니다. 컨트롤러에서.

허브용 인터페이스 생성 클라이언트:

public interface ITypedHubClient
{
    Task TaskCompleted(int id);
}

허브에서 상속 입력된 클라이언트 인터페이스 사용:

public class VarDesignHub : Hub<ITypedHubClient>
{
    public async Task TaskCompleted(int id)
    {
        await Clients.All.InvokeAsync("Completed", id);
    }
}

입력된 허브 컨텍스트를 컨트롤러에 삽입:

public class VarDesignCommController : Controller
{
    private readonly IHubContext<VarDesignHub, ITypedHubClient> _hubContext;

    public VarDesignCommController(IHubContext<VarDesignHub, ITypedHubClient> hubContext)
    {
        _hubContext = hubContext;
    }

    [HttpPut("ProcessVarDesignCommResponse/{id}")]
    public async Task<IActionResult> ProcessVarDesignCommResponse(int id)
    {
        await _hubContext.Clients.All.TaskCompleted(id);

        return new JsonResult(true);
    }
}

위 내용은 ASP.NET Core 컨트롤러에서 SignalR Core Hub 메서드를 어떻게 호출할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.