2017-01-02 63 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)。順便說一句,如果我的回答對您有幫助,請標記爲已接受。如果你仍然有新的問題,你可以打開新的線程。 –