SlideShare a Scribd company logo
UWPアプリにおける正しいnetworking APIの使い方
Using the Right Networking
API for Your UWP App
UWPアプリにおける正しいnetworking APIの使い方
サーバでの利用 シナリオ要件
バックグラウンド
実行
移植性性能考慮点 コード容易性
ユーザ認証付HTTPS
クラウドとの双方向通信
ソケット経由のデバイス間通信
コンテンツ送受信のバックグラウンド実行
UWPアプリにおける正しいnetworking APIの使い方
UWPアプリにおける正しいnetworking APIの使い方
Windows.Web.Http System.Net.Http
対応プログラミング言語 すべてのUWP言語 C#/VB
プライベートCA/オレオレ証明書 ○ ○
サーバー証明書の独自検証 ○ (新機能) × (将来予定)
認証画面が組み込まれているか ○ ×
クライアント証明書対応 ○ 一部対応
Xamarin対応 × ○
var filter = new
HttpBaseProtocolFilter();
filter.ClientCertificate =
myCertificate;
var client = new HttpClient(filter);
HttpResponseMessage response =
await client.GetAsync(uri);
Demo: Online Auction App
要件:
1. サーバー証明書の独自検証
2. クライアント証明書
使用API:
Windows.Web.Http.HttpClient
http://aka.ms/httpclientblogpost
UWPアプリにおける正しいnetworking APIの使い方
UWPアプリにおける正しいnetworking APIの使い方
HttpClient WebSockets
メッセージパターン Request-response Bidirectional
同時通信 半二重 全二重
レイテンシー/オーバーヘッド 高 低
プロキシー/ファイアウォール対応 ○ ○
サーバー証明書の独自検証 ○ (新機能!) ○ (新機能!)
RESTful実装 クラスに組込済 コード実装必要
キャッシュとデータ圧縮の実装 クラスに組込済 コード実装必要
MessageWebSocket StreamWebSocket
メッセージフォーマット 不連続な
WebSocketメッセージ
連続データストリーム
UTF 8 / JSONデータ ○ ×
バイナリ―データ ○ ○
推奨データサイズ 小 (bytes/KB) 大 (MB)
推奨データ形式 Strings, JSON形式 Audio, Video, Photos
var socket= new MessageWebSocket();
socket.MessageReceived =
myReceivingHandler;
socket.Closed = myClosedHandler;
await socket.ConnectAsync(serverUri);
// Send data.
socket.Close(code, reason);
Demo: Online Auction App
要件:
1. 真の双方向通信
2. クライアントから入札を他のクライアントにサーバーで中継
3. レイテンシーやオーバーヘッドを最小に
使用API:
Windows.Networking.Sockets.MessageWebSocket
Wireshark trace for WebSocket run
Wireshark trace for HttpClient run
Bytes on the
wire
UWPアプリにおける正しいnetworking APIの使い方
UWPアプリにおける正しいnetworking APIの使い方
UWPアプリにおける正しいnetworking APIの使い方
Windows.Networking.Sockets System.Net.Sockets WinSock
使用言語 C++/CX ○ × ○
JavaScript ○ × ×
C#/VB ○ ○ ×
バックグラウンド
実行
○ × ×
SocketActivityTrigger
socketTaskBuilder.TaskEntryPoint =
"SocketActivityBackgroundTask.SocketActivity
Task";
var trigger = new SocketActivityTrigger();
socketTaskBuilder.SetTrigger(trigger);
var task = socketTaskBuilder.Register();
socket.EnableTransferOwnership(task.TaskId,
SocketActivityConnectedStandbyAction.Wake);
await socket.ConnectAsync(target, port);
備考:
• ソケットの所有権をもつ唯一のコンポーネントであること
• サービスが使用するソケット所有者のリストを表示:
SocketActivityInformation.AllSockets
• ソケットがリストにないのは、すでにソケットが閉じられているこ
とを意味します。
socket.TransferOwnership(socketId);
Demo: Multi-player Game
要件:
1. ソケット経由のアプリケーション間通信
2. アプリが実行していない場合でも、ソケット経由で要求を
受け取れる
使用API:
Windows.Networking.Sockets
UWPアプリにおける正しいnetworking APIの使い方
UWPアプリにおける正しいnetworking APIの使い方
UWPアプリにおける正しいnetworking APIの使い方
HttpClient
(バックグラウンドタスク)
Windows.Networking.
BackgroundTransfer
プロトコル HTTP HTTP/FTP
データ格納場所 メモリ及びファイル ファイルのみ
推奨データサイズ 小 (KB) 大 (MB)
耐障害性
(ネットワーク切断/リブート)
コード実装必要 中断したところから
再開可能
通信料削減 コード実装必要 クラスに組込済
消費電力削減 コード実装必要 クラスに組込済
BackgroundDownloader downloader = new
BackgroundDownloader();
DownloadOperation download =
downloader.CreateDownload(new
Uri(downloadlocation), file);
Task<DownloadOperation> startTask =
download.StartAsync().AsTask();
downloads = await
BackgroundDownloader.GetCurrentDownloadsAsync
();
await
download.AttachAsync().AsTask(cts.Token,
progressCallback);
Task<DownloadOperation> startTask =
download.StartAsync().AsTask();
Task continueTask =
startTask.ContinueWith(OnDownloadCompleted);
BackgroundTransferCompletionGroup completionGroup
= new BackgroundTransferCompletionGroup();
//Create background task builder
builder.SetTrigger(completionGroup.Trigger);
BackgroundDownloader downloader = new
BackgroundDownloader(completionGroup);
Demo: Multi-player Game
要件:
1. バックグラウンドで新しゲームレベルをダウンロード
2. ダウンロードが完了したらトースト通知
使用API:
Windows.Networking.BackgroundTransfer
UWPアプリにおける正しいnetworking APIの使い方
http://aka.ms/NetworkApiChoice
https://github.com/Microsoft/Windows-universal-samples/
• HttpClient
• WebSockets
• SocketActivityStreamSocket
• BackgroundTransfer
http://aka.ms/WinDevUserVoice
UWPアプリにおける正しいnetworking APIの使い方

More Related Content

PDF
Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発
PPTX
AJAXのBASIC認証検証結果
PDF
マルチ テナント クラウド アプリケーションの設計手法
PDF
おはようたいむしふと
PPTX
Windows Store App HTTP通信を振り返る
PDF
20130315 abc firefox_os
PDF
Html5, Web Applications 2
PDF
50分で掴み取る ASP.NET Web API パターン&テクニック
Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発
AJAXのBASIC認証検証結果
マルチ テナント クラウド アプリケーションの設計手法
おはようたいむしふと
Windows Store App HTTP通信を振り返る
20130315 abc firefox_os
Html5, Web Applications 2
50分で掴み取る ASP.NET Web API パターン&テクニック

Similar to UWPアプリにおける正しいnetworking APIの使い方 (11)

PDF
Dist 29 gcp_serverless_web_app_development
PDF
Microsoft Graph APIを活用した社内アプリケーション開発
PDF
SignalRブートキャンプ
PPTX
SL囲む会東京5 Nodejs×Silverlightではまったこと
PPTX
JavaプログラマのためのWebSocket概要
PPTX
ブラウザからWeb OSへ〜Web - TV連携事例からその可能性を探る〜
PPTX
Interoperability of webassembly with javascript
PDF
Ocif2016_go_web_freamwork
PDF
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.
PDF
次期Office製品群の新しい開発モデルの解説
PPTX
Interactive connection2
Dist 29 gcp_serverless_web_app_development
Microsoft Graph APIを活用した社内アプリケーション開発
SignalRブートキャンプ
SL囲む会東京5 Nodejs×Silverlightではまったこと
JavaプログラマのためのWebSocket概要
ブラウザからWeb OSへ〜Web - TV連携事例からその可能性を探る〜
Interoperability of webassembly with javascript
Ocif2016_go_web_freamwork
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.
次期Office製品群の新しい開発モデルの解説
Interactive connection2
Ad

UWPアプリにおける正しいnetworking APIの使い方