.NET Web 套接字返回 200 错误
Posted
技术标签:
【中文标题】.NET Web 套接字返回 200 错误【英文标题】:.NET web socket returns a 200 error 【发布时间】:2013-09-19 18:41:19 【问题描述】:This simple web socket example 正在返回 200 错误。
编辑:我正在重新发布 C# 中的代码,希望更多人能够就我遇到此问题的原因向我提供建议。
我在本地 IIS 机器上运行 VS2012 Express,项目配置为 4.5.1 框架,并且我已导入 Nuget Microsoft.Websockets 包。
我在下面包含的三段代码是项目中仅有的三段代码,我没有对项目的其余部分进行任何修改。
在意外错误之前没有中断,它不会在打开或任何一方的消息上中断。 200 在 chrome 控制台中显示为错误,但没有响应预览。
这里是客户端(index.htm):
<!doctype html>
<html>
<head>
<title></title>
<script src="Scripts/jquery-1.8.1.js" type="text/javascript"></script>
<script src="test.js" type="text/javascript"></script>
</head>
<body>
<input id="txtMessage" />
<input id="cmdSend" type="button" value="Send" />
<input id="cmdLeave" type="button" value="Leave" />
<br />
<div id="chatMessages" />
</body>
</html>
和客户端脚本(test.js):
$(document).ready(function ()
var name = prompt('what is your name?:');
var url = 'ws://' + window.location.hostname + window.location.pathname.replace('index.htm', 'ws.ashx') + '?name=' + name;
alert('Connecting to: ' + url);
var ws = new WebSocket(url);
ws.onopen = function ()
$('#messages').prepend('Connected <br/>');
$('#cmdSend').click(function ()
ws.send($('#txtMessage').val());
$('#txtMessage').val('');
);
;
ws.onmessage = function (e)
$('#chatMessages').prepend(e.data + '<br/>');
;
$('#cmdLeave').click(function ()
ws.close();
);
ws.onclose = function ()
$('#chatMessages').prepend('Closed <br/>');
;
ws.onerror = function (e)
$('#chatMessages').prepend('Oops something went wrong<br/>');
;
);
这是通用处理程序(ws.ashx):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.Web.WebSockets;
namespace WebSockets
public class ws : IHttpHandler
public void ProcessRequest(HttpContext context)
if (context.IsWebSocketRequest)
context.AcceptWebSocketRequest(new TestWebSocketHandler());
public bool IsReusable
get
return false;
这里是类(TestWebSocketHandler):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;
using Microsoft.Web.WebSockets;
namespace WebSockets
public class TestWebSocketHandler : WebSocketHandler
private static WebSocketCollection clients = new WebSocketCollection();
private string name;
public override void OnOpen()
this.name = this.WebSocketContext.QueryString["name"];
clients.Add(this);
clients.Broadcast(name + " has connected.");
public override void OnMessage(string message)
clients.Broadcast(string.Format("0 said: 1", name, message));
public override void OnClose()
clients.Remove(this);
clients.Broadcast(string.Format("0 has gone away.", name));
【问题讨论】:
您有 500 错误的详细信息吗?它通常会提示错误是什么,描述。 没有描述,或者可惜没看到。 【参考方案1】:它没有提出任何与此问题有关的错误,但我发现 Chrome 未能在我的 200 响应中返回错误。
我只需要在控制面板 --> 程序 --> 打开或关闭 Windows 功能 --> IIS --> 应用程序开发功能 --> WebSocket 协议下打开 WebSocket 协议。
至少我已经向站点添加了一个简单的 VB.NET WebSocket。
只要确保你有 IIS 7+ 并且在 4.5 框架中运行 windows 8...并打开上面的 WebSocket 功能。
【讨论】:
不应该是 IIS 8+ 吗?【参考方案2】:200 代码不是错误,它是 HTTP OK 响应,这是您想要的。使用浏览器检查响应,响应中是否有内容?尝试在您的 ws.onmessage 上添加一个断点以查看它是否启动。
【讨论】:
嗯,它在 Chrome 控制台中返回 200 Unexpected 错误作为“错误”,但这或多或少是我所期望的。我会尝试打破 onmessage。 响应没有预览,并且在通过ws.onerror返回错误之前启动时,ws.onmessage和类中的方法都不会在断点处中断 它也不会在打开时中断 尽管没有完全回答我的问题,但您是第一个尝试的人,而且您对响应的作用非常有帮助。我自己回答了,尽管这很荒谬。享受赏金。 谢谢!我确实忘记了 WebSocket 受到安全限制,这解释了为什么您确实收到了 200 码但仍然出现错误。【参考方案3】:只需检查网络套接字协议表单添加或删除程序
转到控制面板
然后点击添加或删除程序
然后打开或关闭 Windows 功能
然后IIS
然后应用程序开发功能
然后勾选WebSocket Protocol选项的复选框
我在 Microsoft windows server 2012
上对其进行了测试【讨论】:
【参考方案4】:我在***上找到了这个:
200 正常 成功 HTTP 请求的标准响应。实际响应将取决于使用的请求方法。在 GET 请求中,响应将包含对应于所请求资源的实体。在 POST 请求中,响应将包含描述或包含操作结果的实体。
【讨论】:
我没有对你投反对票,但我不确定这对 websockets 有什么帮助。以上是关于.NET Web 套接字返回 200 错误的主要内容,如果未能解决你的问题,请参考以下文章
套接字服务器为某些请求返回 tcp 错误 [RST, ACK]