网络套接字连接失败

websocket connection fails?

本文关键字:失败 连接 套接字 网络      更新时间:2023-09-26

我是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>

名为 ws.ashx 的 C# 泛型处理程序

public class ws : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        if (context.IsWebSocketRequest)
            context.AcceptWebSocketRequest(new TestWebSocketHandler());
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

类 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 2013下使用VS 7,我认为我正在使用的IIS 6

恐怕

WebSockets只能在Windows 8或Windows 2012上运行 ASP.NET 应用程序上运行。尽管 .NET 4.5.1 中包含 API,但如果您不使用这些操作系统,它将不起作用。实际上,如果您尝试使用该ClientWebSocket,它将抛出PlatformNotSupportedException

如果您无法获得任何这些操作系统,则可以检查替代方案:

  • XSocket.NET: http://xsockets.net/
  • 超级网插座 : http://superwebsocket.codeplex.com/
  • 炼金术网络:http://alchemywebsockets.net/
  • WebSocketListener : https://github.com/vtortola/WebSocketListener

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

  1. IIS 版本<8
  2. 未在窗口功能下启用 Web 套接字协议
  3. 拥有 .NET Framework 版本 <4.5
  4. web.config 的system.webServer部分中不包含以下行:
<handlers>
    <add path="/ws.ashx" verb="*" name="ws" type="namespace.ws"/>
</handlers>