.NET Micro Frameworkでネットワークプログラミングする時に便利なクラス達
今、.NET GadgeteerでWindows Azure Storageのテーブルに接続するコードを書いているところですが、よく使うクラスと使用上の注意点をメモっときます。
RESTでWebサービスに接続するには、当然
- HttpWebRequest
- HttpWebResponse
の二つのクラスが必要です。そして当然の様に用意されています。若干の細かい違いはあるものの、フルの.NET Frameworkのライブラリとほぼ同じ。デスクトップアプリやWebアプリでのコーディングそのままの勢いで書いちゃってください。名前空間は同じく、System.Netです。使うときには、プロジェクトの参照にSystem.Http アセンブリを加えてください。
XMLデータを受信して解析するには、
- XmlReader
を使います。このクラスはフルの.NET Frameworkとはかなりメソッド構成が違います。このクラスの使い方はまた別の機会で。名前空間はSystem.Xmlで、使うにはSystem.Xml アセンブリーを参照に追加してください。System.Xml.Legacy アセンブリーは必要ありません。XmlReaderがあるならXmlWriterを使いたい…そんなあなたへ。一応System.Ext.Xml空間にありますが、このクラスは、DPWS(Device Profile For Web Service)ライブラリ用に用意されているクラスで、MFDpwsExtentions というアセンブリーで提供されています。このアセンブリーは比較的サイズが大きく、フルの.NET FrameworkのXmlWriterとは使い勝手も違い、更に、XML文を組み立てるなら、文字列の足し算で十分じゃない?ということで、DPWSを使う場合以外は使わなくてもよいでしょう。小型の組込み機器制御だし。
文字列を組み立てるとなると、
- StringBuilder
も欲しいところです。このクラス、.NET Micro Frameworkの過去のバージョンでは、名前空間が違うところにあったりしたのですが、4.xではSystem.Textにちゃんと用意されています。
で、URL文を組み立てる段になると、UriクラスのEscapeDataString()メソッドが欲しくなります。これは、.NET Micro FrameworkのUriクラスには用意されていません。困ったな。現在調査中ですが、
- Regex
クラスのEscape()メソッドがどうやら使えそう。このクラスは、System.Text.RegularExpressions 名前空間にあります。使う場合は、名前空間と同じ名前のアセンブリーを参照に追加してください。
さて。HttpWebRequestクラスを使い、GetRequestStream()メソッドでストリームを取り出して、データをWebサーバーに送る場合、UTF8でエンコードされたバイト列に文字列を変換します。これは、
- Encoding.UTF8.GetBytes(body)
でエンコード可能です。System.Text名前空間にEncodingクラスがあります。
更に、暗号化など行う場合は、私のブログの前に投稿した記事を見てもらう必要があります。SHA1、HMACなどで暗号化したバイト列を今度はBase64エンコーディングした文字列への変換が必要になります。
- Convert.ToBase64String(buf)
というようにConvertクラスのToBase64String()メソッドで一発変換。
といったように、一通りWebプログラミングに必要なクラス、メソッドが用意されているので、.NET Gadgeteer/Micro Frameworkで、ネットワーク連携プログラミングをお楽しみください。