当前位置: 首页 > 产品大全 > Azure SignalR 服务无服务器快速入门 使用 C# 与 .NET Core

Azure SignalR 服务无服务器快速入门 使用 C# 与 .NET Core

Azure SignalR 服务无服务器快速入门 使用 C# 与 .NET Core

Azure SignalR 服务是一种完全托管的服务,可简化将实时 Web 功能添加到应用程序的过程。它基于 ASP.NET Core SignalR 构建,但将其作为独立的云服务提供,让你无需管理基础设施即可轻松扩展。本文将通过一个使用 C# 和 .NET Core 的简单示例,引导你快速入门 Azure SignalR 服务的无服务器模式。

先决条件

在开始之前,请确保你已具备以下条件:

  1. 一个有效的 Microsoft Azure 账户(可创建免费账户)。
  2. .NET Core SDK 3.1 或更高版本 已安装在你的开发机器上。
  3. Visual Studio CodeVisual Studio 等代码编辑器。
  4. Azure CLIAzure PowerShell(可选,用于资源管理)。

第一步:创建 Azure SignalR 服务资源

  1. 登录到 Azure 门户
  2. 点击“创建资源”,在市场中搜索“SignalR 服务”,然后选择它。
  3. 点击“创建”并配置以下基本信息:
  • 资源组:创建新组或选择现有组。
  • 资源名称:输入一个全局唯一的名称(例如 mySignalRService)。
  • 区域:选择离你的用户最近的区域。
  • 定价层:对于入门和测试,选择“免费 F1”层。对于生产环境,请考虑标准层。
  • 服务模式这是关键步骤。选择“无服务器”模式。在这种模式下,你无需预配置容量,只需为实际使用的连接和消息付费。
  1. 点击“查看 + 创建”,然后点击“创建”。部署完成后,导航到你的新资源。

第二步:获取连接字符串

在 SignalR 服务资源的概览页面或“密钥”设置中,找到“连接字符串”。它通常以 Endpoint=https://...;AccessKey=...;Version=1.0; 的格式呈现。复制主连接字符串。这是你的应用程序连接到 Azure SignalR 服务所必需的凭证。

第三步:创建 .NET Core 控制台应用程序(客户端)

我们将创建一个简单的控制台应用来模拟客户端连接和消息发送。

1. 打开终端或命令提示符,创建一个新目录并初始化项目:
`bash
mkdir SignalRClient
cd SignalRClient
dotnet new console
`

2. 添加必要的 NuGet 包:
`bash
dotnet add package Microsoft.AspNetCore.SignalR.Client
dotnet add package Microsoft.Extensions.Logging.Console
`

  1. 编辑 Program.cs 文件,替换为以下代码。请务必将 <your-connection-string> 替换为你在第二步中复制的实际连接字符串。
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.SignalR.Client;
using Microsoft.Extensions.Logging;
namespace SignalRClient
{
class Program
{
static async Task Main(string[] args)
{
// 使用你的 Azure SignalR 服务连接字符串
var connectionString = "<your-connection-string>";
// 从连接字符串中提取终结点和访问密钥(简化处理,生产环境建议使用更安全的方式)
var endpoint = connectionString.Split(';')[0].Replace("Endpoint=", "");
// 构建 Hub 连接。在无服务器模式下,我们直接连接到 Azure SignalR 服务。
// "chat" 是 Hub 的名称,需要与你的服务器端逻辑(如果有)或协商端点匹配。
var connection = new HubConnectionBuilder()
.WithUrl($"{endpoint}/client/?hub=chat")
.ConfigureLogging(logging =>
{
logging.AddConsole();
logging.SetMinimumLevel(LogLevel.Debug);
})
.Build();
// 定义一个从服务器(或通过服务中转)接收消息的处理程序
connection.On<string, string>("ReceiveMessage", (user, message) =>
{
Console.WriteLine($"{user}: {message}");
});
try
{
// 启动连接
await connection.StartAsync();
Console.WriteLine("连接已建立。输入消息(输入 'exit' 退出):");
// 简单的循环来发送消息
string input;
do
{
input = Console.ReadLine();
if (!string.IsNullOrEmpty(input) && input.ToLower() != "exit")
{
// 发送消息到名为 "SendMessage" 的 Hub 方法
await connection.InvokeAsync("SendMessage", "ConsoleUser", input);
}
} while (input?.ToLower() != "exit");
}
catch (Exception ex)
{
Console.WriteLine($"连接错误: {ex.Message}");
}
finally
{
// 关闭连接
await connection.DisposeAsync();
}
}
}
}

重要说明:在纯粹的无服务器场景下,通常没有常驻的应用程序服务器来托管 Hub 逻辑。Azure SignalR 服务无服务器模式允许客户端直接连接到服务,并通过 Azure FunctionsEvent Grid 等事件驱动服务来处理上游消息(例如 SendMessage)。上述客户端代码主要演示了连接和基本通信模式。要处理 SendMessage 调用,你需要配置一个 Azure Function(使用 SignalR 服务绑定)来接收并广播消息。

第四步:运行与测试

1. 在项目目录中,运行应用程序:
`bash
dotnet run
`

  1. 如果连接成功,你将看到“连接已建立”的提示。输入一些文本并按回车键发送。由于目前没有配置后端函数来处理和广播消息,ReceiveMessage 处理程序可能不会被触发(除非你有另一个已连接的客户端或已配置的后端)。

后续步骤与最佳实践

  • 集成 Azure Functions:要构建完整的无服务器实时应用,请创建一个 Azure Function(例如 HTTP 触发器),使用 SignalR 输出绑定来广播从客户端接收到的消息。这样,当客户端调用 InvokeAsync 时,它可以向一个 Function 端点发送 HTTP 请求,由该 Function 通过 SignalR 服务将消息广播给所有连接的客户端。
  • 安全性:在生产环境中,切勿将连接字符串硬编码在客户端代码中。应使用 Azure Key Vault 或服务器端(如 Function)进行令牌颁发,实现安全的客户端连接。
  • 监控与诊断:利用 Azure 门户中的 SignalR 服务“诊断和解决问题”部分以及 Azure Monitor 来监控连接、消息和错误。
  • 扩展:无服务器模式的优势在于自动扩展。随着连接数的增长,Azure 会自动管理底层资源,你只需按实际使用量付费。

通过以上步骤,你已经成功创建了一个 Azure SignalR 服务资源(无服务器模式),并建立了一个能够与之通信的基本 C# 客户端。这为构建可扩展的实时应用程序(如聊天室、实时仪表板、协作工具等)奠定了坚实的基础。

如若转载,请注明出处:http://www.taiputype.com/product/17.html

更新时间:2026-04-08 22:18:15

产品列表

PRODUCT