Top Banner
Microsoft Platform Ready スペシャルイベント ○○とWindows Azure連携 2011年4月11日 日本マイクロソフト株式会社 デベロッパー&プラットフォーム統括本部 太田 Blog:http://blogs.msdn.com/hirosho/ Twitter:http://twitter.com/embedded_george
33

Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

Jul 30, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

Microsoft Platform Ready スペシャルイベント

○○とWindows Azure連携

2011年4月11日

日本マイクロソフト株式会社 デベロッパー&プラットフォーム統括本部 太田 寛 Blog:http://blogs.msdn.com/hirosho/ Twitter:http://twitter.com/embedded_george

Page 2: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

アジェンダ

ネットワークプログラミング基本の基

つながる先のWindows Azureサービス

Windows 7系での ネットワークプログラミング

.NET Micro Frameworkでの ネットワークプログラミング

自習書紹介

Page 3: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス
Page 4: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

ネットワークによるサービス・機器間連携

インターネット+HTTP

事実上の標準

普及率は一般家庭でさえ、90%を超える ※総務省調べ2010年現在

ネットワークは“和”の世界

様々なベンダーのサービス、機器が相互接続

インターオペラビリティを保障する各種標準

“つながる”、“つなげる”ことが重要

一般的なインターフェイス様式

SOAP

REST

Page 5: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

SOAPの基本

デバイス サービス

SOAPエンベローブ XMLテキスト

WSDL XMLによるWeb Serviceの インターフェイス定義

公開

SOAP Header

SOAP BODY

作成

要求 送信

ロジック

SOAPエンベローブ

作成

応答 受信

WSDLの定義 に従って作成

下位プロトコルは何でも良い

• かっちり定義 • メソッドコールとの親和性 • 業界標準など

Page 6: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

REST

デバイス サービス

HTTPのメソッド(GET/POST/DELETE)と、URLでサービスを構成

HTTP要求

Header

Content

HTTP応答

Header

Content

作成

要求 送信

ロジック

作成

応答 受信

ステータス

基本はブラウザが行っているのと

全く同じ

ContentデータはXMLでもJSONでもバイナリデータで

も何でも可

• 非常にシンプル • 柔軟性が高い • クラウド向き

Page 7: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス
Page 8: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

センサーデータの蓄積と共有

SensorId FormatId PropertyId SensedValue MeasuredTime

Azure Table

クライアント・デバイスから アップロードされたデータを格納

SOAP API

REST API

※各パラメータは、Windows 7 Sensor & Location Platform

の定義を活用

RIAで活用 データの提供 データの活用

Cloud サービス

Page 9: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

SOAPベースのインターフェイス定義

[ServiceContract] public interface ISensorService { [OperationContract] SensorValue UploadSensorValue(SensorValue value); [OperationContract] List<SensorValue> GetSensors(); [OperationContract] List<SensorValue> GetSensor (Guid sensorId); }

インターフェイスに“ServiceContract”属性を追加

これで3つのSOAPメッセージの定義が出来上がる 後は、このインターフェイスを適切に実装するクラスを作成する

メソッドに“OperationContract”属性を追加

Page 10: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

SOAPベースのデータ定義

[DataContract] public class SensorValue { [DataMember] public Guid SensorId { get; set; } [DataMember] public Guid SensorTypeId { get; set; } [DataMember] public Guid FormatId { get; set; } [DataMember] public int PropertyId { get; set; } [DataMember] public string SensedValue { get; set; } [DataMember] public DateTime MeasuredTime { get; set; } }

クラスに“DataContract”属性を追加

プロパティに “DataMember”属性を追加

ネットワーク上でデータを 交換する際、適切にシリアライズ、デシリアライズが行われる。

Page 11: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

とりあえず、試してみる

Visual Studio 2010で “WCFサービスアプリケーション”を作成

SOAP APIの定義を実装し、デバッグ実行

Page 12: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

RESTベースのインターフェイス定義

[ServiceContract] public interface ISensorService { using System.ServiceModel.Web; [OperationContract] [WebInvoke(UriTemplate= “sensorvalue/{sensorId}”, Method= “POST”)] SensorValue UploadSensorValue( string sensorId, SensorValue value); [OperationContract] [WebGet(UriTemplate= “sensors”)] List<SensorValue> GetSensors(); [OperationContract] [WebGet(UriTemplate= “sensor/{sensorId}”)] List<SensorValue> GetSensor (string sensorId); }

WebInvoke、WebGet 属性の付与

HTTPへのURL形式のアクセスは実行時、対応するメソッドにマップされ、コールされる

Page 13: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

とりあえず試してみる

ブラウザで…

HTTPのGET/POSTで、データを取得・登録

Page 14: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

Windows Azure上でのホスティング

クラウド用プロジェクト作成

Visual Studioで新規プロジェクト作成

• “Windows Azureプロジェクト”テンプレートを使用

エンドポイント毎に、WCFサービスを追加

コントラクトの定義と実装

Azure上に配置し実行

詳しくは、こちらをご参照ください

http://msdn.microsoft.com/ja-jp/windowsazure/

Page 15: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

15

Page 16: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

Windowsのネットワークプログラミング

簡単なサーバー側、クライアント側開発

WCFライブラリの利用

Visual StudioによるProxyコードの自動生成

SOAP、RESTのどちらも迅速に開発可能

Address

Binding

Contract

通信のエンドポイント

プロトコル+エンコーディング+トランスポート BasicHttpBinding、WSHttpBinding、 NetNamedPipeBinding、NetMsmqBinding

サービスのインターフェイス定義

Page 17: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

クライアント側でProxyを作成する - SOAP

Visual StudioによるProxyの自動生成

①参照設定を右クリックし、 サービス参照を選択

②追加したいURLを入力し移動をクリック

③名前空間を入力 ④OKをクリック

Page 18: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

SOAPアクセス ~ データのアップロード

… using (var client = new SensorCloud. SensorServiceClient ()) { var uploaded = client.UploadSensorValue( new SensorCloud. SensorValue () { SensorId = sensorId, SensorTypeId = sensorTypeId, FomatId = formatId, PropertyId = propertyId, SensedValue = sensedValue, MeasuredTime = measuredTime }); }

Proxyオブジェクト作成

ProxyオブジェクトのUploadSensorValue() メソッドをコールし、 計測したセンサーデータをアップロード

UploadSensorValue()メソッド実行時、 • SOAPメッセージの組み立て • Web Serviceへのデータが送信 • Web Service側でのストレージへの蓄積 • Web Service側からの応答 と、一連の処理が行われるが、プログラム上は ローカルコールと形式上同一

Page 19: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

SOAPアクセス ~ データの取得

… using (var client = new SensorCloud. SensorServiceClient ()) { var values = client.GetSensor(sensorId); foreach (var v in values) { Guid typeId = v.SensorTypeId, Guid fmtId = v.FormatId, int propId = v.PropertyId, string value = v.SensedValue, DateTime mst = v.MeasuredTime … } }

ProxyオブジェクトのGetSensor() メソッドをコールし、 センサーデータを取得

UploadSensorValue()メソッドと同様、 メソッドのローカルコールと同一の形式 での利用が可能。 ※実際にはネットワーク越しの非同期処理が 行われていることは留意の必要あり

リストで返ってくるので、必要なアイテムを取り出し処理ロジックで利用

Page 20: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス
Page 21: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

.NET Micro Frameworkのネットワーク機能

Socket

IP、TCP、UDPなどの低レベルプロトコル対応

HTTP・HTTPS

HttpWebRequest、HttpWebResponse、及び、 ストリーム、マルチエンコードなどの関連クラス

SSLやX509対応

Web Service

各種WS-* Profile対応

DPWS:Device Profile for Web Service

ローカルネットでのアドホック連携

Page 22: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

Webサービスへのアクセス方法

HTTPによるアクセス

.NET Micro Frameworkの場合、Visual Studioに標準でビルトインされたツールは存在しない

HttpWebRequest・HttpWebResponseクラスを 使用して、XMLやJSONフォーマットを送受信

Windowsとの互換性

HttpWebRequest・HttpWebResponseをはじめとする関連クラスは、.NET Micro Frameworkにも揃っている

Windowsでの経験があれば、同じスキルをそのまま 活用できる

Page 23: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

RESTアクセス ~ データのアップロード

String url = “http://...”; HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest; request.Method = “POST”; request.ContentType = “text/xml ;charset=utf-8”; String content = “<SensorValue xmlns=…>”+ “<FormatId>” + formatId + “</FormatId>” + “<PropertyId>” + propId + “</PropertyId>” + “<SensedTime>” + time + “</SensedTime>” + “<SensedValue>” + value + “</SensedValue>” + “<SensorId>” + sensorId + “</SensorId>” + “</SensorValue>”; byte[] bytes = Encoding.UTF8.GetBytes(content); request.ContentLength = bytes.Length;

HTTP要求用の、オブジェクト作成

HTTP要求メソッドをPOSTに設定 要求時、データ送信フォーマットを XML形式のテキストに指定

センサーデータを XML形式の文字列に 組み立てる

XML形式の文字列を バイトデータに変換し、データ長を設定

Page 24: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

RESTアクセス ~ データのアップロード

var reqStream = request.GetRequestStream(); reqStream.Write(byte, 0, bytes.Length); reqStream.Close(); try { HttpWebResponse response = request.GetResponse() as HttpWebResponse; if (response.StatusCode == HttpStatusCode.OK) { var resStream = response.GetResponse(); // 登録結果がXML形式で返ってくる // 必要に応じてパース } } catch (WebException ex) { // 例外への対応 }

サーバーに送信する為のストリームを取り出し、バイトデータを書き込む

応答オブジェクトを取り出し、応答メッセージを必要に応じて解析

REST APIのWebサービスの基本パターン 必要に応じて要求ヘッダーやURLへの引数を追加 .NET Micro Frameworkは高速のXML Parserが用意されているので、JSONフォーマットよりXMLフォーマットが、More Better

Page 25: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

RESTアクセス ~ データの取得

String url = “http://...”; HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest; request.Method = “GET”; try { HttpWebResponse response = request.GetResponse() as HttpWebResponse; if (response.StatusCode == HttpStatusCode.OK) { var resStream = response.GetResponse(); // 次ページに続く

HTTP要求メソッドをGETに設定

応答オブジェクトを取り出し、 送られてきたデータを取得する為のためのストリームを 取り出す

Page 26: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

RESTアクセス ~ データの取得

// XMLテキストの解析 var reader = XmlReader.Create(resStream); while (reader.Read()); { switch (reader.NodeType) { case XmlNodeType.Element: // 要素の利用 if (reader.Name.CompateTo( “SensorValue”) == 0) { … } break; } } } }

XMLデータ解析用にXmlReaderオブジェクトを作成

Read()メソッドで 順番にXMLテキストを 解析

必要なタグのデータを 見つけ、処理を行う

REST APIのWebサービスの基本パターン 必要に応じて要求ヘッダーやURLへの引数を追加 JSONフォーマットの場合は、TextReaderクラスを用いて、順に文字列を取り出し、解析

Page 27: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス
Page 28: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

第1部 基礎編 4/6公開済み

.NET Micro Frameworkの基本

ユーザーインターフェイス基礎

ネットワークへのアクセス基礎

第2部 Azure連携編 4月末公開予定

REST形式によるAzure上サービスへの接続

HTTPSによるセキュアー通信

.NET Micro Framework自習書

ご活用ください!!

Page 29: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス
Page 30: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

まとめ

Windows Azure上のサービス

Tableなどのストレージによるデータ蓄積

REST、SOAPによるWebサービス

RIAによるWebアプリケーション

Windowsによるネットワークアクセス

WCFによる容易な接続

Windows Embeddedでも同じく活用可能

.NET Micro Frameworkによるネットワークアクセス

HttpWebRequest・HttpWebResponseで 容易にREST、SOAPへアクセス

Page 32: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス
Page 33: Microsoft Platform Readydownload.microsoft.com/download/4/2/4/42439F92-E640-4D51...アジェンダ ネットワークプログラミング基本の基 つながる先のWindows Azureサービス

© 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other

countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentations. Because Microsoft must respond to

changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this

presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.