2017-01-02 73 views
0

有没有一种方法来格式化StreamSocket的HostName以包含用户令牌?当我尝试使用带有用户令牌的URI时,出现“参数不正确”异常。我已经成功使用了MessageWebSocket,但是我需要一个StreamSocket,因为它能够(轻松地)在Windows 10 UWP的后台运行。这是我的代码。任何帮助将不胜感激。UWP C#.net StreamSocket与HostName中的用户令牌

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); 
    } 

回答

0

我得到一个“参数不正确”的例外,当我尝试使用URI与用户令牌。

HostName constructor的参数不是URI,而是一个字符串包含hostname或IP地址。按照hostName参数的说明,它可以包含以下之一:

  • 可以通过域名系统(DNS)或其他名称空间提供商解决的主机的名称。
  • 一个字符串在下面的文件在本地计算机上匹配的主机名:%WINDIR%\ SYSTEM32 \ DRIVERS \等\主机
  • 包含IPv4或主机的IPv6网络地址的字符串。

对于"//example.myexample.com/websocket/dfkjlkdfskldklfdkddkfdkffjf",这是一个URI,使得它不能被HostName类确认,不符合上述要求。价值像example.myexample.com可以被识别。

为什么您可以成功使用MessageWebSocket类,这是因为MessageWebSocket.ConnectAsync方法需要您提供的URI参数。

但我需要一个StreamSocket,因为它能够(轻松地)在Windows 10 UWP的后台运行。

WebSockets提供用于客户端,并通过使用网络HTTP(S)的服务器之间的快速的,安全的双向通信的机制。 Socket可用于与其他设备进行通信。他们不是一回事,我们不能简单地将WebSockets转移到StreamSocket。有关WebSocketsStreamSockets的详细信息,请参考官方文件SocketsWebSockets

但是WebSockets可以在后台使用,您可能不需要StreamSocket。如果您在后台使用WebSockets,则必须使用ControlChannelTrigger。有关如何使用带有ControlChannelTrigger的WebSockets的详细信息,请参阅ControlChannelTrigger with WebSockets

+0

感谢您的支持。我现在使用ControlChannelTrigger,并且它在数据通过MessageWebSocket时成功地触发了我的后台任务。我一直在寻找如何通过套接字接收到的数据进入后台任务,以便我可以处理它。到目前为止,我还没有在网上找到任何解释过程。 –

+0

@JamesB,请尝试引用[本示例](https://code.msdn.microsoft.com/windowsapps/ControlChannelTrigger-91f6bed8)。顺便说一句,如果我的回答对您有帮助,请标记为已接受。如果你仍然有新的问题,你可以打开新的线程。 –