C# Azure信号服务| Asp.Net Web Api |控制台客户端
我能够使用其访问密钥从Asp.NETWeb应用程序连接到Azure Signal服务。Asp.Net Web应用程序通过Azure Signal服务创建并托管一个中心。我创建了一个c#控制台客户端,并使用C# Azure信号服务| Asp.Net Web Api |控制台客户端,c#,azure,signalr,signalr-hub,C#,Azure,Signalr,Signalr Hub,我能够使用其访问密钥从Asp.NETWeb应用程序连接到Azure Signal服务。Asp.Net Web应用程序通过Azure Signal服务创建并托管一个中心。我创建了一个c#控制台客户端,并使用Microsoft.AspNetCore.signar.client库连接到Asp.Net Web应用程序的信号器中心 问题: 我是否应该始终实现像Asp.NETWeb应用程序这样的中间件,并依靠它来创建和讨论集线器? 是的,根据Samara和其他来源,我们有两个选择 使用控制台应用程序中的R
Microsoft.AspNetCore.signar.client
库连接到Asp.Net Web应用程序的信号器中心
问题:
- 使用控制台应用程序中的REST API,将中心(Azure Signal r)作为服务器托管,并将客户端\订阅者作为门户提供服务。这支持单向消息传递
- 使用Azure函数中的REST API(使其成为无服务器的),将一个中心(Azure SignalR)作为服务器托管,并将客户端\订阅者作为门户服务。这支持单向消息传递
- 使用auth()层从Asp.Net托管的Web API托管一个集线器(Azure SignalR),并通过API为客户端提供服务。这支持全面的双向消息传递
- 使用控制台应用程序中的REST API,将中心(Azure Signal r)作为服务器托管,并将客户端\订阅者作为门户提供服务。这支持单向消息传递
- 使用Azure函数中的REST API(使其成为无服务器的),将一个中心(Azure SignalR)作为服务器托管,并将客户端\订阅者作为门户服务。这支持单向消息传递
旁白:人们没有真正的答案,离我远点,我想我对你的问题理解得更好一些。我想你在这里谈论的是示例代码 如果你想制作一个聊天应用程序,你可以修改代码来组合这两个功能。我可以通过更新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;
});
});
app.Command(“客户端”,cmd=>
{
cmd.Description=“启动客户端以侦听服务”;
cmd.HelpOption(“--help”);
var userId=cmd.Argument(“,“设置用户ID”);
cmd.OnExecute(异步()=>
{
var connectionString=connectionStringOption.Value()??配置[“Azure:Signal:connectionString”];
if(string.IsNullOrEmpty(connectionString)| |!hubOption.HasValue())
{
错误选项();
返回0;
}
var client=new ClientHandler(connectionString,hubboption.Value(),userId.Value);
等待client.StartAsync();
//将服务器添加到客户端,以便我们可以双向交谈
var server=newserverhandler(connectionString,hubOption.Value());
等待server.Start();
Console.ReadLine();
等待客户端。DisposeAsync();
返回0;
});
});
需要记住的是,为什么这些示例中的大多数都在信号器服务的顶部添加了API层。为了创建到服务的连接,您正在使用密钥。如果你将其嵌入到你的控制台应用程序中,然后将其分发,那么使用该应用程序的任何人现在都可以通过提取密钥来控制你的所有集线器。除非您信任所有具有这种能力的用户,否则添加一个API层就是一种方法——用户对API进行身份验证,API决定他们在集线器上拥有什么权限 你可以使用任何类型的项目来实现你的目标。SignalR只是一个用于实现websocket连接的系统,通常与web服务结合使用,但这不是一个要求。它与Azure信号器服务对话以创建一个中心,将消息广播给单个用户和所有用户。但单个用户无法向中心发布消息。如何使之成为两个数据同步的聊天应用程序。@SamaraSoucy MSFT,Azure Signal服务与Asp.Net应用程序和控制台客户端的集成似乎彼此大不相同。与SignalR的集成不是无缝的。@SamaraSoucy MSFT,提前感谢您的帮助!SamaraSoucy MSFT,事实证明,就像SQL Server或其他后端服务器一样,我们应该创建一个中间件来通过Azure Signal服务中心交换消息。SamaraSoucy-MSFT,除非我们构建聊天应用程序或便携式应用程序,否则我们可以通过控制台应用程序使用Azure Signal服务。是的,SamaraSoucy MSFT。我昨天已经核实了这个样品。无服务器样本是单向的。只有服务器可以向订阅者广播消息。订阅者不能将邮件发回服务器,如果在边缘情况下需要的话。Azure Signal服务REST API似乎不允许个人用户或订阅者向服务器中心发回消息。我忘了感谢您的努力!明天我将尝试一个练习并分享结果。