C# websocket连接失败?

C# websocket连接失败?,c#,javascript,asp.net,websocket,C#,Javascript,Asp.net,Websocket,我是web套接字新手,尝试使用asp.net通用处理程序和JavaScript WebSocket类创建一个 JavaScript <script type="text/javascript"> window.onload= function () { var name = prompt('what is your name?:'); var url = 'ws://localhost:5707/ws.ashx?nam

我是web套接字新手,尝试使用asp.net通用处理程序和JavaScript WebSocket类创建一个

JavaScript

<script type="text/javascript">
    window.onload= function () {

        var name = prompt('what is your name?:');            
        var url = 'ws://localhost:5707/ws.ashx?name=' + name;    
        var ws = new WebSocket(url);    
        ws.onopen = function () {
            alert('Connection Opened');
        };
            ws.onmessage = function (e) {
        };
            ws.onclose = function () {
            alert('Connection Close');
        };
            ws.onerror = function (e) {
            alert('Error')
        };

        }

</script>
类TestWebSocketHandler,它继承自WebSocketHandler

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

    }
我的问题是

当websocket打算打开时,我注意到当转到处理程序时

context.IsWebSocketRequest // returns false
然后它在客户机上触发错误

Firefox无法在ws://localhost:5707/ws.ashx?name=j上建立与服务器的连接

然后关闭连接实例化

我需要知道问题出在哪里?亲切的


我使用的是windows 7下的vs 2013,我想我使用的IIS 6只能在windows 8或windows 2012上运行的ASP.NET应用程序上运行。尽管.NET4.5.1中包含了API,但如果您不使用这些操作系统,它将无法工作。实际上,如果您尝试使用
ClientWebSocket
,它将抛出一个
PlatformNotSupportedException

如果您无法获得这些操作系统中的任何一个,您可以检查其他操作系统:

  • XSocket.NET:
  • 超级WebSocket:
  • 炼金术网匣:
  • WebSocketListener:

    • 原因可能是以下任何一种:

    • IIS版本<8
    • windows功能下未启用Web套接字协议
    • 具有.NET Framework版本<4.5
    • 在web.config的
      system.webServer
      部分中未包含以下行:
    • 
      
      您是否使用fiddler或类似工具查看发送/接收的内容?没有,但它将如何帮助您。实际上,您可能需要使用firefox工具;切换到“网络”选项卡,找到web套接字连接,然后查看标题。例如,我在这个网站(stackoverflow.com)上看到了一个例子:-你从你的网站上得到了什么?另外:它在Chrome浏览器中工作吗?不,它在前五大浏览器中都不工作:(也许你是对的,但你给我的参考资料中有哪些工具用于处理.net上的websockets/另一方面,我使用.net framework 3.5.1。它不支持websockets吗?或者它与IIS版本相关吗???@Marwan啊,我没有看到Win 7-重要的是操作系统版本;它使用的web套接字层被烘焙到其中http.sys;但是,如果你真的不能使用不同的OST,那么还有其他可用的web套接字API。它们都可能使用普通的套接字。我开发了
      WebSocketListener
      ,它使用普通的
      TcpListener
      来获取
      Socket
      对象并协商WebSocket会话。不过我不会在3.5.1中工作。有什么新功能http.sys提供了将普通http请求转换为WebSocket连接的能力,因此您可以在与网页相同的端口中运行WebSocket。另一方面,我提出的这些替代方案需要作为IIS外部的服务在不同的端口中运行。MS告诉我们,这是一个太大的更改,无法在Windows 7中引入或者Windows server 2008。@vtortola当然,有一种选择是简单地使用NLB将发送到web套接字服务器的请求发送到不同的后端节点。这不是我们自己做的(我们使用不同的域来处理web套接字),但它应该会起作用。我已经走得太远了,我无法得到它。我想我需要做一点关于网络的研究,深入到windows端口之类的东西,所以任何参考资料都会提出建议
      context.IsWebSocketRequest // returns false