signalr - 如何从 Postman WebSocket 调用 SignalR Core 集线器方法
问题描述
我有一个可在 Visual Studio 2019 中运行的 SignalR Core 5.0 应用程序。我将 SignalR 服务器部署到 IIS,但想使用新的 WebSocket 在 Postman 中进行一些测试。
在我的 VS 项目中使用我的一个集线器方法,我们称它为返回一些数据的“SomeHubMethod”,调用集线器方法的正确语法是什么?
例如,我将如何为 Postman WebSocket 翻译这个 C# 调用?
SomeHubMethod = 集线器方法
groupxyz = 发起对 SignalR 服务器的调用的客户端的名称,因此服务器的响应应发送到“groupxyz”。假设响应是“Hello World!”
“1234” = 只是一些测试数据。
在我的 VS 项目中...
private async void SendSomeHubMethod()
{
await connection.InvokeAsync("SomeHubMethod", "groupxyz", "1234");
}
在我的课堂上会收到回复的地方......
connection.On<string>("TheHubResponse", (m) =>
{
_ = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => Debug.WriteLine(m));
// Hello World!
});
我在下面的 Postman WebSocket 链接中找到的组装请求...
{"arguments":["groupxyz", "1234"],"invocationId":"0","target":"SomeHubMethod","type":1}
在发送时,邮递员显示已连接但“Hello World!” 没有从我的集线器返回。
我找到了这篇文章,但没有详细说明调用。
解决方案
你可以,但它有点问题,所以让我们从头开始..
当您定义了 SignalR 集线器端点(即。wss://localhost:5005/hub/notifications
)然后
向以下 URL 发出 POST 请求(注意 https,而不是 wss)
https://localhost:5005/hub/notifications/negotiate?negotiateVersion=1
:。作为回答,您将收到以下信息:
{ "negotiateVersion": 1, "connectionId": "zJ1cqyAe4FRyLCGMzzC0Fw", "connectionToken": "HYunLu0j0IHdBY4NNrkm0g", "availableTransports": [ { "transport": "WebSockets", "transferFormats": [ "Text", "Binary" ] }, { "transport": "ServerSentEvents", "transferFormats": [ "Text" ] }, { "transport": "LongPolling", "transferFormats": [ "Text", "Binary" ] } ] }
从上面的步骤中获取connectionToken并复制它。现在打开与您的集线器的 websocket 连接,如下所示:
wss://localhost:5005/hub/notifications?id={connectionToken}
其中connectionToken是上一步中的令牌。网址应如下所示:wss://localhost:5005/hub/notifications?id=HYunLu0j0IHdBY4NNrkm0g
.现在拿着一些东西..根据微软文档(https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/HubProtocol.md#overview)我们需要发送一个握手请求,如下资料:
{ "protocol": "json", "version": 1 }
纯文本很难实现,因为它需要以
0xE1
ASCII 字符结尾,所以我们需要将带有该字符的握手请求转换为 base64 并发送。我为你做了,这个字符串是:eyJwcm90b2NvbCI6Impzb24iLCAidmVyc2lvbiI6MX0e
现在,当我们掌握了所有这些信息后,让我们深入了解 Postman:
推荐阅读
- python - 使用 tkinter 创建椭圆的流体运动
- python - Keras MLP 分类器不学习
- python - 如何在不安装模块的情况下用 Python 写入 Excel?
- powershell - 如何剪切特定的字符串?
- python - Docker-compose 没有构建一个容器
- arrays - 按键对映射/结构进行分组,并对数组的关联值求和
- c# - C# 在 XML 中搜索标签并显示另一个标签
- python - 从两个二维列表中提取值并将它们存储到熊猫数据框中
- python - Django module not found 错误,但它已被删除并删除了所有引用
- android - 如何使用来自 url 路径的滑行上传图片