.net 带permessage deflate的IIS 8 WebSocket

.net 带permessage deflate的IIS 8 WebSocket,.net,iis,websocket,http-compression,.net,Iis,Websocket,Http Compression,我试图在IIS 8中启用WebSocket扩展permessage deflate,但目前为止运气不佳。IIS似乎不支持任何扩展,也不响应Sec WebSockets扩展头 我试图通过Response.Headers.Add(“Sec WebSockets Extension”,“permessage deflate;client\u no\u context\u takeover;server\u no\u context\u takeover”)手动发送,并在发送/接收之前/之后通过Defl

我试图在IIS 8中启用WebSocket扩展
permessage deflate
,但目前为止运气不佳。IIS似乎不支持任何扩展,也不响应
Sec WebSockets扩展

我试图通过
Response.Headers.Add(“Sec WebSockets Extension”,“permessage deflate;client\u no\u context\u takeover;server\u no\u context\u takeover”)
手动发送,并在发送/接收之前/之后通过
DeflateStream
手动进行压缩/解压缩,但随后WebSocket的接收方法失败

我还尝试将WebSocket作为OWIN中间件手动实现(在库的帮助下),但IIS一直关闭我的
InputStream
,无法读取数据


是否有人成功启用此功能

恐怕无法通过
System.Web.WebSockets

虽然您可以为deflate模式指示HTTP头,但消息需要激活位RSV1才能被识别为压缩:

本文档为PMCS分配WebSocket头的RSV1位 并将该位称为“每条消息压缩”位。在WebSocket上 在使用PMCE的连接中,此位指示 消息是否被压缩

因此,即使压缩有效负载,由于消息头上没有压缩位,接收器仍将尝试读取为未压缩。一旦您通过HTTP升级机制协商了deflate模式,您仍然可以同时发送压缩和未压缩的消息,原因是deflate对于较小的有效负载无效,因此有些消息可能不值得压缩

也就是说,由于ASP.NET中的WebSocket API不允许您计算消息选项,因此我恐怕无法做到这一点


现在,关于奥文。我不得不说,我还没有探索过这条道路,但是,我怀疑这是可能的,至少与IIS8集成在HTTP以外的同一端口中,这可能是您想要做的。

问题是:您是否考虑过将websocket库与自定义owin中间件集成?这难道不可能吗?我想了想,但考虑到它不能在与IIS8相同的TCP端口上运行,我失去了兴趣。从技术上讲,这应该是可能的,但我从来没有尝试过做类似的事情。有可能的话,我的意思是可能在OWIN的自托管应用程序中使用它,而不是在IIS8中。非常感谢您的详细解释和想法!我已经给了你50分:)这是当之无愧的!