你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure SignalR 服务提供了 REST API 来支持服务器到客户端通信方案,例如广播。 你可以选择可以进行 REST API 调用的任何编程语言。 你可以将消息发布到所有已连接的客户端、通过名称指定的特定客户端或者一组客户端。
在本快速入门中,你将了解如何从命令行应用使用 C# 将消息发送到已连接的客户端应用。
重要
本文中出现的原始连接字符串仅用于演示目的。
连接字符串包括应用程序访问 Azure SignalR 服务所需的授权信息。 连接字符串中的访问密钥类似于服务的根密码。 在生产环境中,请始终保护访问密钥。 使用 Azure 密钥保管库安全地管理和轮换密钥,使用 Microsoft Entra ID 保护连接字符串,并使用 Microsoft Entra ID 授权访问。
避免将访问密钥分发给其他用户、对其进行硬编码或将其以纯文本形式保存在其他人可以访问的任何位置。 如果你认为访问密钥可能已泄露,请轮换密钥。
先决条件
本快速入门可以在 macOS、Windows 或 Linux 上运行。
- .NET Core SDK
- 你选择的文本编辑器或代码编辑器。
如果没有 Azure 帐户,请在开始前创建一个免费帐户。
登录 Azure
使用 Azure 帐户登录到 Azure 门户。
在本部分中,你将创建一个基本 Azure SignalR 实例来用于你的应用。 以下步骤使用 Azure 门户创建新实例,但你也可以使用 Azure CLI。 有关详细信息,请参阅 Azure SignalR 服务 CLI 参考中的 az signalr create 命令。
- 登录 Azure 门户。
- 在页面的左上角,选择“+ 创建资源” 。
- 在“创建资源”页上,在“搜索服务和市场”文本框中,输入“signalr”,然后从列表中选择“SignalR 服务”。
- 在“SignalR 服务”页上,选择“创建”。
- 在“基本信息”选项卡上,输入新 SignalR 服务实例的基本信息。 输入以下值:
| 字段 | 建议的值 | 描述 |
|---|---|---|
| 订阅 | 选择订阅 | 选择要用于创建新的 SignalR 服务实例的订阅。 |
| 资源组 | 创建一个名为 SignalRTestResources 的资源组 | 为 SignalR 资源选择或创建资源组。 对于本教程,创建新的资源组比使用现有资源组更为合适。 若要在完成本教程后释放资源,请删除资源组。 删除资源组还会删除属于该组的所有资源。 此操作不能撤消。 删除资源组之前,请确保它不包含你希望保留的资源。 有关详细信息,请参阅 Using resource groups to manage your Azure resources(使用资源组管理 Azure 资源)。 |
| 资源名称 | testsignalr | 输入用于 SignalR 资源的唯一资源名称。 如果你的区域中已使用了 testsignalr,请添加一个数字或字符,以将名称设为唯一。 该名称必须是包含 1 到 63 个字符的字符串,只能包含数字、字母和连字符 ( -) 字符。 该名称的开头或末尾不能是连字符字符,并且连续的连字符字符无效。 |
| 区域 | 选择你的区域 | 为新的 SignalR 服务实例选择合适的区域。 Azure SignalR 服务当前并非在所有区域中都可用。 有关详细信息,请参阅 Azure SignalR 服务区域可用性。 |
| 定价层 | 选择“更改”,然后选择“免费(仅限开发/测试)”。 选择“选择”以确认你选择的定价层。 | Azure SignalR 服务有三个定价层:免费、标准和高级。 教程使用的是免费层,除非在先决条件中另行说明。 若要详细了解各个层级之间的功能差异以及定价,请参阅 Azure SignalR 服务定价 |
| 服务模式 | 选择适当的服务模式 | 在 Web 应用中托管 SignalR 中心逻辑并使用 SignalR 服务作为代理时,请使用“默认”。 使用无服务器技术(如 Azure Functions)托管 SignalR 中心逻辑时,请使用“无服务器”。 “经典”模式仅用于向后兼容,不建议使用。 有关详细信息,请参阅 Azure SignalR 服务中的服务模式。 |
对于 SignalR 教程,你不需要更改“网络”和“标记”选项卡上的设置。
- 选择“基本信息”选项卡底部的“查看 + 创建”按钮。
- 在“查看 + 创建”选项卡上检查各个值,然后选择“创建”。 部署需要几分钟时间才能完成。
- 在部署完成后,选择“转到资源组”按钮。
- 在 SignalR 资源页面上,从左侧菜单中选择“设置”下的“密钥”。
- 复制主密钥的连接字符串。 在本教程中,稍后你将需要使用此连接字符串来配置你的应用。
克隆示例应用程序
在服务部署的同时,让我们准备好代码。 首先,克隆 GitHub 中的示例应用。 接下来,为应用设置 SignalR 服务连接字符串。 最后,在本地运行应用程序。
打开 git 终端窗口。 切换到要克隆示例项目的文件夹。
运行下列命令,克隆示例存储库。 此命令在计算机上创建示例应用程序的副本。
git clone https://github.com/aspnet/AzureSignalR-samples.git
生成并运行示例
此示例是一个控制台应用,展示了如何使用 Azure SignalR 服务。 它提供了两种模式:
- 服务器模式:使用简单的命令调用 Azure SignalR 服务 REST API。
- 客户端模式:连接到 Azure SignalR 服务,并从服务器接收消息。
另外,你还将了解如何生成访问令牌来向 Azure SignalR 服务进行身份验证。
生成可执行文件
我们使用 macOS osx.10.13-x64 作为示例。 你可以找到有关如何在其他平台上进行生成的参考资料。
cd AzureSignalR-samples/samples/Serverless/
dotnet publish -c Release -r osx.10.13-x64
启动客户端
本文中出现的原始连接字符串仅用于演示目的。 在生产环境中,请始终保护访问密钥。 使用 Azure 密钥保管库安全地管理和轮换密钥,使用 Microsoft Entra ID 保护连接字符串,并使用 Microsoft Entra ID 授权访问。
cd bin/Release/netcoreapp2.1/osx.10.13-x64/
Serverless client <ClientName> -c "<ConnectionString>" -h <HubName>
启动服务器
cd bin/Release/netcoreapp2.1/osx.10.13-x64/
Serverless server -c "<ConnectionString>" -h <HubName>
运行示例而不发布
还可以运行以下命令来启动服务器或客户端
# Start a server
dotnet run -- server -c "<ConnectionString>" -h <HubName>
# Start a client
dotnet run -- client <ClientName> -c "<ConnectionString>" -h <HubName>
使用 user-secrets 指定连接字符串
你可以运行示例的根目录中的 dotnet user-secrets set Azure:SignalR:ConnectionString "<ConnectionString>"。 之后,将不再需要选项 -c "<ConnectionString>"。
使用情况
在服务器启动后,使用以下命令发送消息:
send user <User Id>
send users <User List>
send group <Group Name>
send groups <Group List>
broadcast
可以启动具有不同客户端名称的多个客户端。
与非 Microsoft 服务集成
使用 Azure SignalR 服务,可以将第三方服务与系统集成。
定义技术规范
下表显示到目前为止受支持的 REST API 的所有版本。 也可找到每个特定版本的定义文件
| 版本 | API 状态 | 门 | 特定 |
|---|---|---|---|
1.0-preview |
可用 | 5002 | 斯瓦格 |
1.0 |
可用 | 标准 | 斯瓦格 |
适用于每个特定版本的 API 的列表在下表中提供。
| API | 1.0-preview | 1.0 |
|---|---|---|
| 广播到所有对象 | ✓ | ✓ |
| 广播到组 | ✓ | ✓ |
| 广播到某些组 | ✓(已弃用) | N / A |
| 发送给用户 | ✓ | ✓ |
| 发送到某些用户 | ✓(已弃用) | N / A |
| 将用户添加到组 | N / A |
✓ |
| 从组中删除用户 | N / A |
✓ |
| 检查用户是否存在 | N / A |
✓ |
| 从所有组中删除用户 | N / A |
✓ |
| 发送到连接 | N / A |
✓ |
| 向组中添加连接 | N / A |
✓ |
| 从组中删除连接 | N / A |
✓ |
| 关闭客户端连接 | N / A |
✓ |
| 服务运行状况 | N / A |
✓ |
广播到所有人
| 版本 | API HTTP 方法 | 请求 URL | 请求正文 |
|---|---|---|---|
1.0-preview |
POST |
https://<instance-name>.service.signalr.net:5002/api/v1-preview/hub/<hub-name> |
{"target": "<method-name>", "arguments": [...]} |
1.0 |
POST |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name> |
{"target": "<method-name>", "arguments": [...]} |
广播到组
| 版本 | API HTTP 方法 | 请求 URL | 请求正文 |
|---|---|---|---|
1.0-preview |
POST |
https://<instance-name>.service.signalr.net:5002/api/v1-preview/hub/<hub-name>/group/<group-name> |
{"target": "<method-name>", "arguments": [...]} |
1.0 |
POST |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name> |
{"target": "<method-name>", "arguments": [...]} |
发送给用户
| 版本 | API HTTP 方法 | 请求 URL | 请求正文 |
|---|---|---|---|
1.0-preview |
POST |
https://<instance-name>.service.signalr.net:5002/api/v1-preview/hub/<hub-name>/user/<user-id> |
{"target": "<method-name>", "arguments": [...]} |
1.0 |
POST |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/users/<user-id> |
{"target": "<method-name>", "arguments": [...]} |
将用户添加到组
| 版本 | API HTTP 方法 | 请求 URL |
|---|---|---|
1.0 |
PUT |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name>/users/<user-id> |
从组中删除用户
| 版本 | API HTTP 方法 | 请求 URL |
|---|---|---|
1.0 |
DELETE |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name>/users/<user-id> |
检查用户是否存在于组中
| API 版本 | API HTTP 方法 | 请求 URL |
|---|---|---|
1.0 |
GET |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/users/<user-id>/groups/<group-name> |
1.0 |
GET |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name>/users/<user-id> |
| 响应状态代码 | 描述 |
|---|---|
200 |
用户存在 |
404 |
用户不存在 |
从所有组中删除用户
| API 版本 | API HTTP 方法 | 请求 URL |
|---|---|---|
1.0 |
DELETE |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/users/<user-id>/groups |
将消息发送到连接
| API 版本 | API HTTP 方法 | 请求 URL | 请求正文 |
|---|---|---|---|
1.0 |
POST |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/connections/<connection-id> |
{ "target":"<method-name>", "arguments":[ ... ] } |
向组中添加连接
| API 版本 | API HTTP 方法 | 请求 URL |
|---|---|---|
1.0 |
PUT |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name>/connections/<connection-id> |
1.0 |
PUT |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/connections/<connection-id>/groups/<group-name> |
从组中删除连接
| API 版本 | API HTTP 方法 | 请求 URL |
|---|---|---|
1.0 |
DELETE |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name>/connections/<connection-id> |
1.0 |
DELETE |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/connections/<connection-id>/groups/<group-name> |
关闭客户端连接
| API 版本 | API HTTP 方法 | 请求 URL |
|---|---|---|
1.0 |
DELETE |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/connections/<connection-id> |
1.0 |
DELETE |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/connections/<connection-id>?reason=<close-reason> |
服务运行状况
| API 版本 | API HTTP 方法 | 请求 URL |
|---|---|---|
1.0 |
GET |
https://<instance-name>.service.signalr.net/api/v1/health |
| 响应状态代码 | 描述 |
|---|---|
200 |
服务良好 |
5xx |
服务错误 |
清理资源
如果不打算继续使用此应用,请按照以下步骤删除本快速入门中创建的所有资源,以免产生任何费用:
在 Azure 门户的最左侧选择“资源组”,,然后选择创建的资源组。 或者,可以使用搜索框按名称查找资源组。
在打开的窗口中选择资源组,然后单击“删除资源组”。
在新窗口中键入要删除的资源组的名称,然后单击“删除”。
后续步骤
在本快速入门中,你学习了如何使用 REST API 从 SignalR 服务向客户端广播实时消息。 接下来,了解有关如何使用基于 REST API 构建的 SignalR 服务绑定开发和部署 Azure Functions 的更多信息。