IIS 7反向代理背后的Websocket服务器

The*_*her 5 c# reverse-proxy websocket

我使用.NET 4.0和Sockets使用hybi-17规范构建了一个WebSocket聊天服务器.如果浏览器连接到端口81上的聊天服务器,则一切都按预期运行.但是由于公司防火墙等 - 我需要浏览器连接到端口80,因为这需要全世界的每台PC都可以访问.

所以我使用IIS 7作为反向代理.我已经设法让浏览器连接到IIS 7上的ws:// localhost/chatProxy,然后将请求代理到http:// localhost:81/chatProxy,其中websocket服务器正在侦听.

Websocket服务器执行握手并为连接创建套接字,然后返回到侦听状态.

问题是,在客户端,websocket"onopen"事件永远不会被触发.就好像IIS不会将请求发送回浏览器一样.

任何帮助将受到高度赞赏!

提前致谢!!

Mar*_*urg 7

这是因为IIS 7不知道websockets并且无法代理它.然而,它会将初始请求转发到您的websockets服务器,因为对websocket服务器的初始请求是标准HTTP请求(带有一些额外的头文件).IIS将了解这一点并简单地转发请求.但是,在收到websocket请求后,websocket服务器将发送101响应并切换到websocket模式.IIS将无法理解websocket流量,也无法代理.

IIS 8将原生支持websockets(支持将包含在.NET 4.5中),并希望Microsoft还将添加对反向代理websocket流量的支持.