Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET web套接字返回200错误_C#_Javascript_Websocket - Fatal编程技术网

C# .NET web套接字返回200错误

C# .NET web套接字返回200错误,c#,javascript,websocket,C#,Javascript,Websocket,正在返回一个200错误 编辑:我正在用C#重新发布代码,希望更多的人能够就我为什么会出现这个问题向我提供建议 我正在本地IIS计算机上运行VS2012 Express,该项目配置为4.5.1框架,我已导入Nuget Microsoft.Websockets包 下面包含的三段代码是项目中仅有的三段代码,我没有对项目的其余部分进行任何修改 在发生意外错误之前没有中断,在打开或消息的任何一侧都不会中断。200在chrome控制台中显示为错误,但没有响应预览 以下是客户端(index.htm): 下面是

正在返回一个200错误

编辑:我正在用C#重新发布代码,希望更多的人能够就我为什么会出现这个问题向我提供建议

我正在本地IIS计算机上运行VS2012 Express,该项目配置为4.5.1框架,我已导入Nuget Microsoft.Websockets包

下面包含的三段代码是项目中仅有的三段代码,我没有对项目的其余部分进行任何修改

在发生意外错误之前没有中断,在打开或消息的任何一侧都不会中断。200在chrome控制台中显示为错误,但没有响应预览

以下是客户端(index.htm):

下面是类(TestWebSocketHandler):


200代码不是错误,而是HTTP OK响应,这正是您想要的。使用浏览器检查响应,响应中是否有内容?尝试在您的ws.onmessage上添加一个断点,以查看它是否启动。

我在wikipedia中发现了以下内容:

200行
成功HTTP请求的标准响应。实际响应将取决于所使用的请求方法。在GET请求中,响应将包含与请求的资源相对应的实体。在POST请求中,响应将包含一个描述或包含操作结果的实体。

它没有出现与此问题相关的错误,但我发现了Chrome未能与我的200响应一起返回的错误

我只需在控制面板-->程序-->打开或关闭Windows功能-->IIS-->应用程序开发功能-->WebSocket协议下打开WebSocket协议

至少我在网站上添加了一个简单的VB.NET WebSocket


只需确保您拥有IIS 7+并在4.5框架中运行windows 8…并打开上面的WebSocket功能

只需检查web套接字协议表单“添加或删除程序”

转到控制面板


然后单击添加或删除程序


然后打开或关闭Windows功能


然后IIS


然后应用程序开发功能


然后选中WebSocket协议选项的复选框



我在Microsoft windows server 2012上测试了它

您有500错误的详细信息吗?它通常会返回一个关于错误是什么的提示,一个描述。没有描述,或者很遗憾,我看不到它。它在Chrome控制台中将200个意外错误作为“错误”返回,但这或多或少是我所期望的。我将尝试断开onmessage。响应没有预览,在通过ws.OnError返回错误之前启动时,类中的ws.onmessage和方法都不会在断点上断开。如果没有完全回答我的问题,它也不会断开OnPendeSpite,你是第一个尝试的人,你在回答问题时帮了大忙。我自己回答了,尽管这很可笑。享受赏金吧,谢谢!我确实忘记了WebSocket是受安全限制的,这解释了为什么您得到了200代码但仍然出现错误。我没有否决您的意见,但我不确定这对WebSocket有何帮助。这不应该是IIS 8+?
    <!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>
$(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/>');
    };

});
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;
            }
        }
    }
}
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));
        }

    }
}