主机名中带有用户令牌的 UWP C# .net StreamSocket

UWP C# .net StreamSocket with User Token in HostName

有没有办法格式化 StreamSocket 的主机名以包含用户令牌?当我尝试将 URI 与用户令牌一起使用时,出现 "Parameter is Incorrect" 异常。我在 MessageWebSocket 上取得了成功,但我需要一个 StreamSocket,因为它能够(轻松地)运行 在 Windows 10 UWP 的后台。这是我的代码。任何帮助将不胜感激。

public static async void ConnectToStreamSocket()
    {
        StreamSocket socket = new StreamSocket();
        string hostUri = "//example.myexample.com/websocket/dfkjlkdfskldklfdkddkfdkffjf";
        HostName host = new HostName(hostUri);           
        string proto = "wss";
        await socket.ConnectAsync(host, proto);
    }

I get a "Parameter is Incorrect" exceptions when I try to use a URI with the a user Token.

HostName constructor is not a URI的参数,而是一个包含hostname或IP地址的字符串。根据hostName参数的描述,它可以包含以下之一:

  • The name of a host that can be resolved by the Domain Name System (DNS) or by another namespace provider.
  • The name of a host that matches a string in the following file on the local computer: %WINDIR%\system32\drivers\etc\hosts
  • A string that contains an IPv4 or an IPv6 network address of the host.

对于"//example.myexample.com/websocket/dfkjlkdfskldklfdkddkfdkffjf",这是一个不符合上述要求的URI,因此HostNameclass无法识别它。可以识别example.myexample.com这样的值。

为什么您可以成功使用 MessageWebSocket class, this is because MessageWebSocket.ConnectAsync 方法需要您提供的 URI 参数。

but I need a StreamSocket because it is able to (easily) run in the background on Windows 10 UWP.

WebSockets 提供一种使用 HTTP(S) 通过 Web 在客户端和服务器之间进行快速、安全的双向通信的机制。 Socket可用于与其他设备通信。它们不是一回事,我们不能简单地将WebSockets转为StreamSocket。关于uwp中WebSocketsStreamSockets的更多细节请参考官方文档Sockets and WebSockets.

但是WebSockets可以在后台使用,你可能不需要StreamSocket。如果您在后台使用 WebSockets,则必须使用 ControlChannelTrigger. Details for how to use WebSockets with ControlChannelTrigger please reference ControlChannelTrigger with WebSockets.