websocket连接失败?

时间:2014-03-31 08:59:33

标签: c# javascript asp.net websocket

我是网络套接字的新手,并尝试使用asp.net Generic Handler和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>

C#Generic Handler称为ws.ashx

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 7下使用vs 2013,我认为我使用的是IIS 6

2 个答案:

答案 0 :(得分:5)

WebSockets仅适用于在Windows 8或Windows 2012上运行的ASP.NET应用程序。尽管API已包含在.NET 4.5.1中,但如果您不使用这些操作系统,它将无法运行。实际上,如果您尝试使用ClientWebSocket,则会抛出PlatformNotSupportedException

如果您无法使用任何这些操作系统,可以查看备选方案:

答案 1 :(得分:1)

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

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