c# - 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?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# 通用处理程序称为 ws.ashx

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

继承自WebSocketHandler的类TestWebSocketHandler

   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

最佳答案

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

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

关于c# - websocket 连接失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22757465/

相关文章:

c# - 在 Service Fabric 上托管 Web API

c# - NuGet 包导致 visual studio 2015 和 Xamarin 出现问题

javascript - html5应用程序缓存强制更新

c# - 无法复制文件,找不到部分路径

asp.net - 如何判断 Application_Error 中的请求/响应是否可用?

asp.net - 设置背景时边框样式改变

C# 值和引用类型

c# - MVC 5 中 PostAuthenticateRequest 管道中的空引用

javascript - Json 对象在 while 循环中断页面期间进行字符串检查

javascript - 如何使用 Promise 发送对象数组