I have a SignalR Core hub. I can connect to the same hub using clients like Postman or WebSocket King. But, I am unable to invoke a hub method that expects parameters. The same method can be easily invoked from SignalR JS client. I inspected browser developer tools and extracted the message getting transferred from client to server. When I try to invoke the same method from Postman/WebSocket King with the same message it just don't work.
Hub method:
public async Task Subscribe(string[] imeis, string group)
{
...
}
Message getting transferred from SignalR client (accessed from browser developer tools):
{"arguments":[[10001001],"ALL"],"invocationId":"0","streamIds":[],"target":"Subscribe","type":1}
From Postman/WebSocket King, sending this same message does not hit the hub method. Any suggestions?
Ok, so for my case, I think I've been able to connect to the server. So basically, it is a 2-step process:
1. Establishing connection
Issue an HTTP POST request to: <SIGNALR_CORE_SERVER_HUB_URL>/negotiate?negotiateVersion=1
The response should be something like this:
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"]}]}
The connection token value (OeGB-EKkoYvcSg7Z4p4n0w) is important here! Save it for use in Step 2.
2. Invoking SignalR hub method:
Using WebSocket protocol, invoke the URL:<SIGNALR_CORE_SERVER_HUB_URL>?id=OeGB-EKkoYvcSg7Z4p4n0w
After successful connection establishment, pass in the following data to server through websocket:
{"protocol":"json","version":1}
This will result in getting an empty response from server. Following this, invoke the server hub method and pass the arguments as follows:
{"arguments":[["10001001"],"ALL"],"invocationId":"0","streamIds":
[],"target":"Subscribe","type":1}
Here, "Subscribe" is my SignalR Core Hub method name, which accepts two arguments, an array of strings (["10001001"]) and a string ("ALL").
After this, from server side, push notifications will start coming to client through the same websocket connection.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With