如何从Postman/WebSocket King调用SignalR Core hub方法

4
我有一个 SignalR Core hub。我可以使用类似 Postman 或 WebSocket King 的客户端连接到相同的 hub。但是,我无法调用一个需要参数的 hub 方法。相同的方法可以从 SignalR JS 客户端轻松调用。我检查了浏览器开发者工具并提取了从客户端传输到服务器的消息。当我尝试使用相同的消息从 Postman/WebSocket King 调用相同的方法时,它就无法正常工作。
Hub 方法:
public async Task Subscribe(string[] imeis, string group)
{
   ...     
}

来自SignalR客户端(通过浏览器开发者工具访问)的消息正在传输中:

{"arguments":[[10001001],"ALL"],"invocationId":"0","streamIds":[],"target":"Subscribe","type":1}

从Postman/WebSocket King发送相同的消息并不会触发中心方法。有什么建议吗?

你应该让属性名称与方法中的名称匹配,尝试发送“已转移”消息。 - Jerry Cai
@JerryCai 转移消息是什么意思?你能详细解释一下吗? - Sk Shahnawaz-ul Haque
如果您想要发布到方法中,您应该传递 IMEI 和组,现在的消息不能匹配属性(IMEI 和组)。 - Jerry Cai
1个回答

4

好的,对于我的情况,我认为我已经成功连接到服务器了。基本上,这是一个两步过程:

1. 建立连接

向以下HTTP POST请求发出请求:<SIGNALR_CORE_SERVER_HUB_URL>/negotiate?negotiateVersion=1

响应应该类似于这样:

HTTP/1.1 200 OK
Content-Length: 256
Content-Type: application/json
Server: Microsoft-IIS/10.0
Access-Control-Allow-Origin: null
Access-Control-Allow-Credentials: true
X-Powered-By: ASP.NET
Date: Tue, 17 Oct 2021 09:08:59 GMT

{"negotiateVersion":1,"connectionId":"TP- 
KX7BpPj4y4rxMFwaznw","connectionToken":"OeGB- 
EKkoYvcSg7Z4p4n0w","availableTransports": 
[{"transport":"WebSockets","transferFormats":["Text","Binary"]}, 
{"transport":"LongPolling","transferFormats":["Text","Binary"]}]}

这里重要的是连接令牌值(OeGB-EKkoYvcSg7Z4p4n0w)!请在第二步中保存它。

2. 调用SignalR hub方法:

使用WebSocket协议,调用以下URL:<SIGNALR_CORE_SERVER_HUB_URL>?id=OeGB-EKkoYvcSg7Z4p4n0w

在成功建立连接后,通过WebSocket向服务器传递以下数据:

{"protocol":"json","version":1}

这将导致从服务器收到空响应。 随后,调用服务器的方法并按以下方式传递参数:

{"arguments":[["10001001"],"ALL"],"invocationId":"0","streamIds": 
[],"target":"Subscribe","type":1}

在这里,“Subscribe”是我的 SignalR Core Hub 方法名称,它接受两个参数,一个字符串数组(["10001001"])和一个字符串 ("ALL")。
此后,服务器端会通过相同的 WebSocket 连接向客户端发送推送通知。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接