.Net 4.5 WebSocket Server, работающий на Windows 7?
Я знаю, что класс ClientWebSocket.Net 4.5 не поддерживается в Windows 7, но возможно ли создать сервер WebSocket, работающий в Windows 7, с помощью API.Net 4.5?
Для ясности, согласно и здесь, и здесь, похоже, что серверная часть реализации.Net 4.5 WebSocket должна поддерживаться даже в Windows 7, но при этом работает HttpListener и пытается получить к нему доступ с помощью реализации WebSocket с открытым исходным кодом. я получил сообщение об ошибке "Portocol не поддерживается"
2 ответа
Поддержка HTTP.SYS на уровне операционной системы для веб-сокетов ограничена Win8 / Windows Server 2012 - что, я согласен, глупо (оно должно быть частью обновления Windows или, самое большее, пакета обновления, IMO).
Это означает, что вы не можете использовать поддержку фреймворка для WebSockets из HttpListener
или ASP.NET напрямую.
Но: что касается "возможно ли создать сервер WebSocket" - конечно... но только если вы сами обрабатываете протокол TCP/IP или используете для этого стороннюю библиотеку. Это немного раздражает, но не так плохо, как может показаться.
Изменить: после некоторой проверки я могу подтвердить, что серверные компоненты для этого не работают в Windows 7 (и т. Д.); IsWebSocketRequest
возвращается false
хотя это запрос веб-сокета с Connection: Upgrade
а также Upgrade: websocket
(и т.д.) заголовки (из сессии Chrome, как это помогает).
Я, однако, очень удивлен, обнаружив, что части на стороне клиента не работают, потому что: это проще и не требует (или, по крайней мере, не требует) использования HTTP.SYS. Попытка использовать их бросает PlatformNotSupportedException
,
Как говорит Марк, API-интерфейсы Microsoft не работают в Windows 7. Однако есть несколько библиотек с открытым исходным кодом, которые поддерживают WebSockets в Windows 7, а в некоторых случаях даже кросс-платформенные через Mono.
Цитата из документации System.Net.WebSockets:
Некоторые классы в пространстве имен System.Net.WebSockets поддерживаются в Windows 7, Windows Vista SP2 и Windows Server 2008. Однако единственные общедоступные реализации клиентских и серверных WebSockets поддерживаются в Windows 8 и Windows Server 2012. Классы а элементы класса в пространстве имен System.Net.WebSockets, которые поддерживаются в Windows 7, Windows Vista SP2 и Windows Server 2008, являются абстрактными классами. Это позволяет разработчику приложения наследовать и расширять эти абстрактные классы с помощью фактической реализации клиентских WebSockets.
Другими словами: DIY фактическая реализация.