首页 > 解决方案 > 如何使用signalR核心从asp.net核心接收消息到UWP

问题描述

SignalR 核心是使用 javascript 客户端或 Angular 进行演示的我的案例是使用 UWP 来呈现前端。虽然微软只告诉如何从客户端调用消息到服务器,但它的文档没有显示如何接收消息 [ https://docs.microsoft.com/en-us/aspnet/core/signalr/dotnet-client?view =aspnetcore-2.2][1]

这是我的服务器:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        services.AddSingleton<IInventoryServices, InventoryServices>();
        services.AddSignalR();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseSignalR(route =>
        {
            route.MapHub<MessageHub>("/hub");
        });

        app.UseMvc();
    }
}

这是控制器:

[Route("api/hub")]
[ApiController]
public class MessController : Controller
{
    private IHubContext<MessageHub> _messhubContext;

    public MessController(IHubContext<MessageHub> messhubContext)
    {
        _messhubContext = messhubContext;
    }

    public ActionResult Post()
    {
        _messhubContext.Clients.All.SendAsync("send", "Strypper", "Howdy");
        System.Diagnostics.Debug.WriteLine("I'm here");
        return Ok();
    }

这里是集线器:

public class MessageHub : Hub
{
    public Task Send(string user ,string message)
    {
        return Clients.All.SendAsync("Send", user, message);
    }
}

我的“邮递员”搞砸了,我不想讨论它。这里有没有人使用 uwp 框架可以向我展示从我制作的服务器接收消息的方式?

标签: c#uwpasp.net-core-signalr

解决方案


不好意思,原来是我理解错了,转过来了。

对于服务器到客户端的通信,您必须遵循此处的文档

你需要像这样在 UWP 中定义一个监听器:

connection.On<string, string>("ReceiveMessage", (user, message) =>
{
   //do something
});

并像这样在服务器端发送消息:

await Clients.All.SendAsync("ReceiveMessage", user,message);

上一个答案

要从客户端调用Hub方法,您可以使用该InvokeAsync方法:

await connection.InvokeAsync("MyMethod", "someparameter");

然后你只需在Hub类中创建方法

public class MessageHub : Hub
{
    public Task Send(string user ,string message)
    {
        return Clients.All.SendAsync("Send", user, message);
    }

    public Task MyMethod(string parameter)
    {
        //do something here
    }
}

还有一个重载InvokeAsync<TResult>允许您创建具有返回类型的方法。


推荐阅读