为什么在 UWP 设备上 WS 通信没有收到消息?

Why is no message received in WS communication on a UWP device?

我有一个 WS 服务器,我想从该服务器(使用另一个 Web 应用程序)向连接到 session 的所有 HoloLens 设备广播消息。

首先,我在 Hololens 应用程序中实现了一个 MessageWebSocket 客户端,它启动了与示例 public WS 服务器的连接 echo.websocket.org 只是为了检查客户端上的设置是否正确边。这是代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

#if WINDOWS_UWP
using System.Threading.Tasks;
using Windows.Networking.Sockets;
using Windows.Storage.Streams;
using Windows.Web;
using System;

#endif

public class WebSocketClient : MonoBehaviour
{
    void Start()
    {

#if WINDOWS_UWP
            int msgTime = 5;
            int fadeTime = 1;
            guiPhraseReporter.QueueRaport("START", msgTime, fadeTime);
            MessageWebSocket ws = new MessageWebSocket();
            ws.Control.MessageType = SocketMessageType.Utf8;
            ws.MessageReceived += (MessageWebSocket sender, MessageWebSocketMessageReceivedEventArgs args) =>
            {
                guiPhraseReporter.QueueRaport("Trying to receive message...", msgTime, fadeTime);
                try
                {
                    using (DataReader dataReader = args.GetDataReader())
                    {
                        dataReader.UnicodeEncoding = UnicodeEncoding.Utf8;
                        string message = dataReader.ReadString(dataReader.UnconsumedBufferLength);
                        Debug.Log(message);
                    }
                }
                catch (Exception ex)
                {
                    Debug.Log("Error occurred");
                }
            };

            ws.Closed += (IWebSocket sender, WebSocketClosedEventArgs  args) => {
                Debug.Log("WS closed");
            };

            try
            {
                Task connectTask = ws.ConnectAsync(new Uri("ws://echo.websocket.org")).AsTask();
                connectTask.ContinueWith(async _ =>
                {
                    string message = "Hello, World!";
                    using (DataWriter dataWriter = new DataWriter(ws.OutputStream))
                    {
                        dataWriter.WriteString(message);
                        await dataWriter.StoreAsync();
                        dataWriter.DetachStream();
                    }
                    Debug.Log("Sending Hello World");
                });
            }
            catch (Exception ex)
            {
                WebErrorStatus webErrorStatus = WebSocketError.GetStatus(ex.GetBaseException().HResult);
                // Add additional code here to handle exceptions.
                Debug.Log(ex);
            }

#endif

    }
}

它工作正常,我能够向服务器发送一条消息,它被回显并被客户端正确接收。

然而,当我使用我将在其上进行测试的实际服务器时,事情变得一团糟。在我的服务器上,我复制了 echo.websocket.org 的行为,并回显发送的任何消息。我能够连接,连接没有关闭(从未调用 Closed),但我没有收到任何消息。

如果我使用网络浏览器(使用 chrome 的智能 Websocket 扩展)测试两个服务器,它们都可以工作。唯一的区别(也是我得到的唯一可能的线索)是示例服务器(在 Hololens 上运行的服务器)在连接时发送更多 headers:

对比我的服务器:

也许有一些更简单的方法可以做到这一点,但到目前为止我还没有找到任何适用于 UWP 的好的 WS 包装器。任何帮助表示赞赏。

毕竟我的服务器应用程序逻辑错误。所以一开始WS通信就没有问题,谢谢你的时间。