Javascript WebSocketException:“;“I/O操作已中止”;

Javascript WebSocketException:“;“I/O操作已中止”;,javascript,c#,asp.net,iis,websocket,Javascript,C#,Asp.net,Iis,Websocket,正在尝试使用JavScript客户端和ASP.NET服务器实现基本WebSocket频道。客户机代码如下: function Connect() { var ws = new WebSocket("ws://" + window.location.host + "/callback.aspx"); ws.onmessage = function (a) { alert("Message"); }; ws.onopen = function (a) { alert("Ope

正在尝试使用JavScript客户端和ASP.NET服务器实现基本WebSocket频道。客户机代码如下:

function Connect()
{
    var ws = new WebSocket("ws://" + window.location.host + "/callback.aspx");
    ws.onmessage = function (a) { alert("Message"); };
    ws.onopen = function (a) { alert("Open"); };
    ws.onerror = function (a) { alert("Error"); };
}
Callback.aspx是一个基本的ASP.NET网页,它是:

protected void Page_Load(object sender, EventArgs e)
{
    if (HttpContext.Current.IsWebSocketRequest)
    {
        HttpContext.Current.AcceptWebSocketRequest(SocketProc);
    }
}

private static async Task SocketProc(AspNetWebSocketContext a)
{
    try
    {
        ArraySegment<byte> Buffer = new ArraySegment<byte>(new Byte[1024]);
        while (true)
        {
            WebSocketReceiveResult res = await a.WebSocket.ReceiveAsync(Buffer, CancellationToken.None);
            if (a.WebSocket.State != WebSocketState.Open)
                return;
        }
    }
    catch (Exception exc)
    {
        Debug.WriteLine(exc);
    }
}
在客户机上,OnOpen启动,然后OnError启动

如果我在
ReceiveAsync
附近立即捕捉到异常,WebSocket对象将从中关闭

我错过了什么?在Windows Server 2016上进行测试,包括IIS Express和IIS本身

编辑:我一直在用内置IE进行测试,但现在我用Chrome进行了尝试,但得到了一个不同的错误。这一次,没有例外,
ReceiveAsync
返回一个MessageType=Close、CloseStatus=ProtocolError的对象。在客户端上,Chrome控制台中有一个错误:

WebSocket connection to 'ws://localhost:53329/callback.aspx' failed: Invalid frame header

EDIT2:它以某种方式使用HTTP处理程序而不是ASPX页面。奇怪。没有使用经典ASP.NET的要求,所以现在就可以了,但这个问题可能还没有解决。

您至少应该使用101个交换协议来响应。到目前为止,您的连接只是立即关闭,仅此而已。你为什么要在页面加载中这样做?虽然我必须承认我从未使用过经典的asp.net,但这是您的项目中的一个要求?我可以在IE和Chrome的网络日志中看到响应101。我很确定,
AcceptWebSocketRequest
生成了这个。这就是在客户端触发onopen的原因。您至少应该使用101个交换协议来响应。到目前为止,您的连接只是立即关闭,仅此而已。你为什么要在页面加载中这样做?虽然我必须承认我从未使用过经典的asp.net,但这是您的项目中的一个要求?我可以在IE和Chrome的网络日志中看到响应101。我很确定,
AcceptWebSocketRequest
生成了这个。这就是在客户端中触发onopen的原因。
WebSocket connection to 'ws://localhost:53329/callback.aspx' failed: Invalid frame header