Azure SignalR服务| Asp.Net Web API |控制台客户端

时间:2019-04-04 09:59:52

标签: c# azure signalr signalr-hub

我能够使用其访问密钥从Asp.Net Web应用程序连接到Azure SignalR服务。 Asp.Net Web App通过Azure SignalR服务创建并托管一个中心。我创建了一个c#控制台客户端,并使用Microsoft.AspNetCore.SignalR.Client库连接到Asp.Net Web应用程序的SignalR Hub。

问题:

  1. 我是否应该始终实现像Asp.Net Web应用程序这样的中间件,并依靠它来创建和通过Hub进行对话? 是的,根据萨马拉和其他来源,我们有两种选择。

    • 使用控制台应用程序中的REST API将集线器( Azure SignalR )托管为服务器,并为客户端\订户提供门户。这支持单向消息传递。
    • 使用Azure Functions中的REST API(使其无服务器)来托管集线器( Azure SignalR )作为服务器,并为客户端\订户提供门户。这支持单向消息传递。
    • 使用auth()层从Asp.Net托管的Web API托管一个集线器( Azure SignalR ),并通过API满足客户需求。这支持完全双向的消息传递。
  2. 是否无法从c#控制台直接与Azure SignalR服务进行通信以创建集线器并通过集线器发送我的消息?

    • 使用控制台应用程序中的REST API将集线器( Azure SignalR )托管为服务器,并为客户端\订户提供门户。这支持单向消息传递。
    • 使用Azure Functions中的REST API(使其无服务器)来托管集线器( Azure SignalR )作为服务器,并为客户端\订户提供门户。这支持单向消息传递。

我是Azure SignalR服务的新手;请在上述问题上为我提供帮助。我的问题几乎得到了回答。希望对您有帮助!

P.S。人们没有真正的答案,请远离我

1 个答案:

答案 0 :(得分:1)

我想我对您的问题了解得更好。我认为您在这里谈论的是示例代码? https://github.com/aspnet/AzureSignalR-samples/tree/master/samples/Serverless

如果要创建聊天应用程序,则可以修改代码以结合这两个功能。我能够通过更新program.cs来运行两个代码集来做到这一点。这不是一个完整的聊天客户端-所有消息仍然都说它们来自其他用户,但是我希望它可以使您更好地了解其工作原理。

    app.Command("client", cmd =>
    {
        cmd.Description = "Start a client to listen to the service";
        cmd.HelpOption("--help");

        var userId = cmd.Argument("<userId>", "Set User ID");

        cmd.OnExecute(async () =>
        {
            var connectionString = connectionStringOption.Value() ?? configuration["Azure:SignalR:ConnectionString"];

            if (string.IsNullOrEmpty(connectionString) || !hubOption.HasValue())
            {
                MissOptions();
                return 0;
            }

            var client = new ClientHandler(connectionString, hubOption.Value(), userId.Value);

            await client.StartAsync();

//Add the server to the client so we can talk both ways
            var server = new ServerHandler(connectionString, hubOption.Value());
            await server.Start();


            Console.ReadLine();
            await client.DisposeAsync();

            return 0;
        });
    });

有一些要记住的地方,以及为什么大多数这些示例在SignalR服务的顶部添加了API层。为了创建与服务的连接,您使用的是密钥。如果您将其嵌入到控制台应用程序中,然后对其进行分发,则使用该应用程序的任何人现在都可以通过提取密钥来控制所有集线器。除非您相信所有用户都拥有这种能力,否则添加API层是使用户通过API身份验证的方式,然后API决定他们对集线器拥有的权限。