【问题标题】:Connect JS secure websocket to C# websocket server (Fleck)将 JS 安全 websocket 连接到 C# websocket 服务器 (Fleck)
【发布时间】:2019-05-28 19:25:44
【问题描述】:

我在 C# (asp.net) 中有一个 API,我在其中使用 feck 运行这个 websocket 服务器:

SocketService.start();

            SocketService.server.Start(socket =>
            {
                socket.OnOpen = () =>
                {
                    SocketService.Connessione(socket);
                };
                socket.OnClose = () =>
                {
                    SocketService.Disconnesione(socket);
                };
                socket.OnMessage = message =>
                {
                    SocketService.Messaggio(message, socket);
                };
            });

这是 SocketService.Start():

public static void start()
    {
        server = new WebSocketServer($"wss://{GetLocalIPAddress()}:{"4450"}/BNS/");
    }

我尝试过使用不安全的 ws 处理一个简单的 HTML/JS 页面,它运行良好。

然后我在我的主程序中尝试过,我需要它在 HTTPS 上运行,所以当使用不安全的 ws chrome 时,我告诉我改用 wss。

所以我将我的 ws 服务器更改为 wss,但它什么也没做,它给了我超时错误。

这是JS代码:

var start = function () {
        var wsImpl = window.WebSocket || window.MozWebSocket;
        var form = document.getElementById('sendForm');
        var input = document.getElementById('sendText');

        alert("Connessione...");

        // create a new websocket and connect
        window.ws = new wsImpl('@Percorsi.IndirizzoSocket');

        alert("conn");

        // when the connection is established, this method is called
            ws.onopen = function () {
                alert("Connessione aperta");
                 var openJson = {
                    "Id": "@Model.accountCorrente.Id",
                    "type": "Identificazione"
                 };

                alert("send");
                ws.send(stringify(openJson));
            };
            // when the connection is closed, this method is called
            ws.onclose = function () {
                alert("Connessione chiusa");
            }
            // when data is comming from the server, this metod is called
            ws.onmessage = function (val) {
                if (confirm("Hai ricevuto un nuovo messaggio!\nPremi ok per visualizzarlo.")) {
                    window.location("/Annunci/Chat/" + val);
                } else { }
            };

    }

我不知道如何使它工作。

提前感谢您的帮助!

【问题讨论】:

    标签: javascript c# asp.net asp.net-core websocket


    【解决方案1】:

    您似乎没有将服务器证书设置为在 WS over TLS 下使用(不要与 HTTPS 混淆,后者是 HTTP over TLS)。 如果你看到 feck 的webpage 中的例子,你会意识到你必须设置证书:

    server.Certificate = new X509Certificate2("MyCert.pfx"); 
    

    【讨论】:

    • 感谢您的回答。但是我在哪里可以找到这个证书或者我如何获得一个?
    • 您必须创建自己的证书。您可以做的是打开 IIS,双击“服务器证书”,创建自签名证书(按照所有步骤操作),然后导出 pfx 文件。
    猜你喜欢
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2023-02-22
    • 2021-06-23
    • 2014-04-09
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    相关资源
    最近更新 更多