【问题标题】:Why does HttpContext.AcceptWebSocketRequest function make an error when it gets an instance?为什么HttpContext.AcceptWebSocketRequest函数获取实例时会报错?
【发布时间】:2015-06-19 06:20:35
【问题描述】:

根据网上的一些示例和this guide我创建了一个webSocket的连接。

public class sockets: IHttpHandler {

    public bool IsReusable {
        get {
            throw new NotImplementedException();
        }
    }
    public void ProcessRequest(HttpContext context) {
        if (context.IsWebSocketRequest) {
            context.AcceptWebSocketRequest(new socketHandler());
        }
    }
}

public class socketHandler: WebSocketHandler {

    public socketHandler(): base(null) {}
}

行中有错误-

context.AcceptWebSocketRequest(new socketHandler());

错误:

参数 1:无法从 'socketHandler' 转换为 'System.Func(System.Web.WebSockets.AspNetWebSocketContext,System.Threading.Tasks.Task)'

谁能帮帮我?

【问题讨论】:

    标签: c# asp.net websocket


    【解决方案1】:

    AcceptWebSocketRequest 将方法作为参数,而不是类实例。您的代码应如下所示:

    public void ProcessRequest(HttpContext context) {
        if (context.IsWebSocketRequest) {
            context.AcceptWebSocketRequest(HandleWebSocket);
        }
    }
    
    private Task HandleWebSocket(WebSocketContext wsContext)
    {
        // Do something useful
    }
    

    【讨论】:

    • 感谢您的帮助..那么我链接到的指南中的示例是错误的?但是,在 socketHandler 类中,我实现了 OnOpen、OnMessage 等函数……现在我不明白这些函数何时会发生?更重要的是,javascript中的onOpen函数什么时候发生?
    • 您应该看看这个 SO question,其中一个答案可能适合您的需求。 stackoverflow.com/questions/25668398/…
    【解决方案2】:

    您在尝试使用 Microsoft.Web.WebSockets 中的函数时引用了 System.Web 中的函数。
    添加适当的引用,它将起作用。

    【讨论】:

    • 感谢工作。该教程似乎没有代码下载。这确实帮助我解决了问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    相关资源
    最近更新 更多