MessageWebSocket 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
支援網路通訊,允許使用 WebSocket 讀寫整則訊息。
public ref class MessageWebSocket sealed : IClosable
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class MessageWebSocket final : IClosable
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class MessageWebSocket final : IClosable
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class MessageWebSocket : System.IDisposable
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class MessageWebSocket : System.IDisposable
function MessageWebSocket()
Public NotInheritable Class MessageWebSocket
Implements IDisposable
- 繼承
- 屬性
- 實作
Windows 需求
| 規格需求 | Description |
|---|---|
| 裝置系列 |
Windows 10 (已於 10.0.10240.0 引進)
|
| API contract |
Windows.Foundation.UniversalApiContract (已於 v1.0 引進)
|
| 應用程式功能 |
internetClient
privateNetworkClientServer
|
備註
MessageWebSocket 類別提供基於訊息的 WebSocket 協定抽象化。 使用 MessageWebSocket 時,整個 WebSocket 訊息會在一次操作中被讀取或寫入。 相較之下, StreamWebSocket 允許每次讀取操作都能讀取訊息的各個區段,而不必一次完成整個訊息。
對於 UTF-8 訊息,必須使用 MessageWebSocket。 StreamWebSocket 僅支援二進位訊息。
處理例外狀況
當你呼叫 MessageWebSocket 類別的非同步方法時,必須撰寫程式碼來處理異常。 例外可能因參數驗證錯誤、名稱解析失敗及網路錯誤而產生。 網路錯誤的例外(例如連線中斷、連線失敗及 HTTP 伺服器故障)可能隨時發生。 這些錯誤會導致拋出例外。 如果應用程式無法處理,例外可能會導致整個應用程式在執行時被終止。
Windows。Networking.Sockets 命名空間提供方便的輔助方法與列舉方式,用於處理使用 WebSockets 時的錯誤。 這對於在應用程式中處理特定網路例外的方式很有幫助。 應用程式也可以利用例外中對參數驗證錯誤的 HRESULT 來學習導致異常的更詳細資訊。
欲了解更多可能例外及如何處理例外的資訊,請參閱 「網路應用程式中的例外處理」。
在 Windows Server 2012 上使用 MessageWebSocket
在 Windows Server 2012 和 Windows Server 2012 R2,這是實作大部分 Windows 類別的 Windows.Networking.dll。Networking.Sockets 命名空間若未啟用 Media Foundation 功能,將無法載入。 因此,使用MessageWebSocket及相關WebSocket類別的應用程式在Windows中,如果關閉 Media Foundation 功能,Networking.Sockets 命名空間將會失敗。 Windows Server 2012 或 Windows Server 2012 R2 安裝時,關閉了媒體基礎功能。
媒體基礎功能可在 Windows Server 2012 或 Windows Server 2012 R2 上啟用,使用 伺服器管理員,或透過命令提示字元或腳本輸入以下文字:
dism /online /enable-feature /featurename:ServerMediaFoundation 啟用 Media Foundation 功能後,使用者會被提示重新啟動。 電腦重新啟動後,Windows 中會建立 sockets 和 WebSockets 的類別。Networking.sockets 命名空間會如預期運作。
版本歷程記錄
| Windows版本 | SDK 版本 | 附加價值 |
|---|---|---|
| 1607 | 14393 | ServerCustomValidationRequested |
| 1803 | 17134 | SendFinalFrameAsync |
| 1803 | 17134 | SendNonfinalFrameAsync |
建構函式
| 名稱 | Description |
|---|---|
| MessageWebSocket() |
建立一個新的 MessageWebSocket 物件。 |
屬性
| 名稱 | Description |
|---|---|
| Control |
取得 MessageWebSocket 物件上的套接字控制資料。 |
| Information |
取得 MessageWebSocket 物件的套接字資訊。 |
| OutputStream |
取得輸出串流,寫入遠端網路目的地的 MessageWebSocket 物件。 |
方法
| 名稱 | Description |
|---|---|
| Close() |
關閉 MessageWebSocket 物件,並向伺服器發送一個空的關閉框架。 |
| Close(UInt16, String) |
關閉 MessageWebSocket 物件並標示關閉原因。 |
| ConnectAsync(Uri) |
啟動非同步操作,連接 MessageWebSocket 物件上的遠端網路目的地。 |
| Dispose() |
執行與釋放、釋放或重設非受控資源相關聯的應用程式定義工作。 |
| SendFinalFrameAsync(IBuffer) |
非同步(有進度)會以序列串流寫入資料框架,語意上這是 WebSocket 訊息的最後一個框架(此框架的 FIN 位元設為 1)。 此方法與 SendNonfinalFrameAsync 允許你發送單一 WebSocket 框架。 |
| SendNonfinalFrameAsync(IBuffer) |
非同步(有進展)會以序列串流寫入一幀資料,語意下會有更多幀跟隨同一 WebSocket 訊息(此幀的 FIN 位元設為 0)。 此方法與 SendFinalFrameAsync 允許你發送單一 WebSocket 框架。 |
| SetRequestHeader(String, String) |
在 MessageWebSocket 物件所使用的 HTTP請求訊息中,為WebSocket協定握手時新增HTTP請求標頭。 |
事件
| 名稱 | Description |
|---|---|
| Closed |
當 MessageWebSocket 物件作為密切握手的一部分接收到接近的框架時,會發生這種情況。 |
| MessageReceived |
一個表示 MessageWebSocket 物件已收到訊息的事件。 |
| ServerCustomValidationRequested |
當一個新的 MessageWebSocket 連線到安全伺服器 URI(wss: 協定)正在驗證時發生。 如果你想為連線實作自訂伺服器驗證,就處理這個事件。 |