.net 带permessage deflate的IIS 8 WebSocket
我试图在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
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分:)这是当之无愧的!