【问题标题】:How Can I Connect To A Local WebSocket Server with Uno Platform WebAssembly如何使用 Uno Platform WebAssembly 连接到本地 WebSocket 服务器
【发布时间】:2020-08-16 22:40:50
【问题描述】:

以下代码适用于 UWP,但不适用于 WASM。我确实在 WASM 头上安装了 Uno.Wasm.WebSockets 包。

_webSocketConnectionCTS = new CancellationTokenSource();
using (_webSocket = new ClientWebSocket())
{
    try
    {
        await _webSocket.ConnectAsync(new Uri(address), _webSocketConnectionCTS.Token);
        await Receive(_webSocket, _webSocketConnectionCTS.Token);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Failed to connect to WebSocket server: " + ex.Message);
    }
}

连接时抛出异常:"Value cannot be null" but both parameter is null.

【问题讨论】:

    标签: uno-platform


    【解决方案1】:

    ClientWebSocket 类在 Uno 的当前版本中不可用,因为基础类没有为它提供实现。您可以改用Uno.Wasm.WebSockets 包,它使用与ClientWebSocket 相同的API。

    这是来自the documentation的示例:

    var ws = new Uno.Wasm.WebSockets.WasmWebSocket();
    
    // Connect to a simple echo WebSocket server
    await ws.ConnectAsync(new Uri("wss://echo.websocket.org"), CancellationToken.None);
    
    Console.WriteLine("Program: Connected!");
    
    // Send some data
    var data = new ArraySegment<byte>(Encoding.UTF8.GetBytes("Hello websocket !"));
    await ws.SendAsync(data, System.Net.WebSockets.WebSocketMessageType.Binary, false, CancellationToken.None);
    
    Console.WriteLine("Program: Sent!");
    
    // Read the echo back
    var buffer = new byte[1024];
    var received = await ws.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
    
    var receivedString = Encoding.UTF8.GetString(buffer, 0, received.Count);
    Console.WriteLine($"Received {received.Count} bytes: {receivedString}");
    

    【讨论】:

    • 该类在此处可用 (github.com/unoplatform/Uno.Wasm.WebSockets/blob/…),并且是 nuget 包的一部分。如果您没有看到它,则很可能是 nuget restore 错误。你安装的是哪个版本?
    • 您要将包添加到哪个项目?它应该适用于任何 .net 标准项目。
    • 我开始怀疑这是否与您的项目名称有关。它以 Uno 结尾吗?如果是这样,您需要在类型前面加上 global::
    • 知道了。以这种方式命名的解决方案会导致实际以 Uno 开头的类型出现问题。
    • 我们将添加一条消息,指出以这种方式命名项目时可能会发生此类错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2015-08-29
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    相关资源
    最近更新 更多