Я думаю, у вас есть ошибка в GetServerResponseKey()
.keyForHash
должно быть присвоено String.Concat(key, "258EAFA5-E914-47DA-95CA-C5AB0DC85B11")
Значение, которое вы добавляете к ключу клиента, должно быть жестко запрограммировано и не может быть динамически генерируемой направляющей.См. Пункт 5 в разделе 4.2.2 spec .
Еще один момент, вы должны рассмотреть возможность проверки запроса заголовка Sec-WebSocket-Protocol.Если это будет отправлено клиентом, он будет ожидать, что вы ответите заголовком в ответе на рукопожатие (всегда предполагая, что ваш сервер, конечно, поддерживает суб-протокол).Это не заставит рукопожатие затормозить, но может позже заставить клиента отклонить ваш ответ рукопожатия.