Trabajar con WebSocket no es tan sencillo como con solicitudes HTTP y si hace unos meses hubiese visto la posibilidad que nos ofrece Postman mi desarrollo habría sido más sencillo. Para que nos os pase lo mismo voy a contaros como. Esto era lo que tenía hasta la fecha para poder observar a WS:

Lo primero es bajarse el proyecto de GitHub: proyecto paso a paso.

Cuando lo tengas todo y lo ejecutes:

Donde tendremos nuestro chat, quedate con la dirección que marco.

Aunque os sugiero que encontreis en el fichero de configuración el puerto http y no el https, como esta en beta algunos problemas estoy teniendo… por tanto nuestra URL es:

http://localhost:64428/

Si no la diferencia esta en usar el protocolo https copiar la url y en vez de poner ws en Postman, poner wss y el puerto correspondiente.

Entramos en Postman y creamos un WebSocket Request:

Entramos en Postman y creamos un WebSocket Request:

Donde hemos pegado la URL (paso 1) y cuando estemos conectados podremos enviar mensaje (paso 2), con el contenido de la siguiente imagen para que veais si estamos correctamente conectados.

El mensaje (paso 2) es el siguiente, respetando el unicode que os pongo a continuación, con el se hace el handshake.

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

Hora vamos escribiendo en el chat y podemos ver como van llegando los mensajes via ws:

En realidad lo que hemos creado es una suscripción para ver como va funcionado y puedes crearte una con un aplicación de CLI como el trozo de codigo que os pongo a continuación:

using System.Net.WebSockets;
using System.Text;

var ws = new ClientWebSocket();

await ws.ConnectAsync(new Uri("YOUR URL THE SAME AS POSTMAN"), CancellationToken.None);

var handshake = new List<byte>(Encoding.UTF8.GetBytes(@"{""protocol"":""json"", ""version"":1}"))
    {
        0x1e
    };

await ws.SendAsync(new ArraySegment<byte>(handshake.ToArray()), 
    WebSocketMessageType.Text, true, CancellationToken.None);

var buffer = new byte[4096];

while (true)
{
    var result = await ws.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
    if (result.MessageType == WebSocketMessageType.Close)
    {
        await ws.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, 
            string.Empty, CancellationToken.None);
        break;
    }
    else
    {
        Console.WriteLine(Convert.ToBase64String(buffer));
        buffer = new byte[4096];
    }
}

Y ¿nos funcionará para suscribirnos a Azure SignalR?, veamos una prueba:

Y como os decia en la nota, usar la URL correspondiente a nuestro Azure SignalR para realizar dicha suscripción.

Ya podeis usar Postman para monitorizar vuestra aplicación.