WebSocket connection to 'ws://www.xxxx.com/xxx/xx' failed: Error during WebSocket handshake: Unexpected response code: 200
网站绑定到了效劳器,直接在效劳器上接见webSocket效劳是可行的,然则当我用外网接见时,这个毛病就是我最大的仇人,在这之前还遇到过几个小毛贼,可以轻松处理,不再提,直面boss吧
消费两个下昼的时候寻觅处理方案,然则并没有找到,种种处理方案,然则直接来形貌.NET下运用这一题目标,倒是不多,但是面对了这一题目标朋侪,大把的有。
这个无关浏览器题目,我有火狐,谷歌,IE测试过,该出的题目照样会有。
开辟平台:.NET,应用ASP.NET MVC搭建网站,在个中应用WebSocket效劳,目标是在网站内设想一个议论平台。
具体来说一说:
起首,看下我的网页代码
:
<script type="text/javascript"> $(function () { var url = "ws://xxxx:xx"+"@Url.Action("RequestProcessCenter")"; var ws; function connect() { ws = new WebSocket(url); $("#TopicContent").append("正在衔接\n"); ws.onopen = function () { $("#TopicContent").append("已衔接\n"); }; ws.onmessage = function (evt) { console.log(evt.data); $("#TopicContent").append(evt.data); }; ws.onclose = function () { $("#TopicContent").append("已封闭\n"); }; ws.onerror = function (evt) { console.log(evt.data); $("#TopicContent").append(evt.data); }; }; $("#send").click(function () { console.log(1); console.log(ws.readyState); console.log(WebSocket.OPEN); if (ws.readyState == WebSocket.OPEN) { ws.send($("#content").val()); $(this).val(""); } else { $("#TextMessge").append("衔接已封闭"); } }); $("#open").click(function () { connect(); }); $("#close").click(function () { ws.close(); }); }); </script>
背景代码:
public void RequestProcessCenter() { if (HttpContext.IsWebSocketRequest) { var currUser = GetCurrUser(); this._UserName = currUser.LoginName; HttpContext.AcceptWebSocketRequest(ProcessTopic); } else { HttpContext.Response.Write("请求失利哟"); } }
webSocket所请求的url花样我想应该是不会配错。
毛病显现如图:
返回200,只管是请求胜利了,然则效果不是我们想要的。
请求体式格局也确实是websocket,毛病却存在了,这是为何呢?查询了许多材料,然则并没有发明真正处理这一题目标,也许是我找的体式格局有题目,然则百度前三页我是看了,并没有想要的处理方案。本身着手,做了个测试,反而发明有用。
我在效劳器上布置的网站,用的是默许的80端口,接见会失效,假如webSocket不必和网站绑定的统一端口呢?
经由该测试:
1.当地80端口绑定域名 webSocket应用域名,端口80 无效
2.当地80端口绑定域名 webSocket应用2017端口 主机地点用效劳器ip地点 有用
3.当地2017端口 未绑定域名 webSocket应用80端口 无效
4.当地2017端口 未绑定域名 webSocket应用2017端口 有用
总结 80端口可以受体系限定
另一方面:域名绑定是不是会影响 没有测试
胜利处理了外网虽返回200却不能运用websocket效劳的题目。
这类情况下须要注重的是,IIS效劳器上须要增加两个网站了,一个用于一般的80端口网页接见,另一个做零丁的WebSocket功用,这两个网站可以运用统一个顺序版本,我就是这么做的,没有什么好的主意,菜鸟级人物。
这个网站引见了WebSocket的一些学问,以及websocket默许运用80-433端口,也许我在想,是不是是我网站绑定的端口和websocket绑定雷同端口时,外网请求就是此时出的错呢,这个题目也一时半会不能穷究,暂时性的功用是达到了,然则觉得这个处理方案不是很好的,只能是说满足了需求,却不能简化需求历程。
留下一个猜测,我在效劳器上接见时,是可行的,都是运用80端口,websocket效劳可以一般运用,那是由于在效劳器上提议时,直接接见的就是我当地效劳,所以说防火墙不会阻挠,然则我运用外网接见时,入网划定规矩也许阻挡了我的请求,点击衔接,提议挪用WebSocket效劳,而效劳端口也运用80端口,引发防火墙辨认出题目。
以上就是关于WebSocket布置效劳器外网没法衔接的处理方案的细致内容,更多请关注ki4网别的相干文章!